1

假设这C是一个可序列化的类:

@Serializable
class C

我至少有四种方法可以获取此类的序列化程序。

  1. 伴侣(?)功能。实际上 IDEA 并没有让我去声明,所以我假设它是一种合成的编译器插件生成的函数。
val s = C.serializer()
  1. serializer()使用具体类型参数调用:
val s = serializer<C>()
  1. KClass 实验扩展:
val c = C()
val s1 = C::class.serializer()
val s2 = c::class.serializer()
  1. serializer()半实验超载:
val c = C()
val s1 = serializer(C::class.createType())
val s2 = serializer(c::class.createType())

最后两种方法似乎更强大:例如,我可以将它用于多态序列化,获取抽象类型实例的实际 KClass 并选择正确的序列化器。

我有几个问题:

  1. 实际存在哪些按类型获取序列化程序的方法,哪些方法是可取的?
  2. 据我了解,我可以为一个类注册多个序列化程序,那么在每种情况下我会得到哪一个呢?
  3. 假设我已经使用 为一个类注册了一个自定义序列化程序@Serializable(with=...),是否有可能以某种方式为其获取标准序列化程序?
4

0 回答 0