假设这C
是一个可序列化的类:
@Serializable
class C
我至少有四种方法可以获取此类的序列化程序。
- 伴侣(?)功能。实际上 IDEA 并没有让我去声明,所以我假设它是一种合成的编译器插件生成的函数。
val s = C.serializer()
serializer()
使用具体类型参数调用:
val s = serializer<C>()
- KClass 实验扩展:
val c = C()
val s1 = C::class.serializer()
val s2 = c::class.serializer()
serializer()
半实验超载:
val c = C()
val s1 = serializer(C::class.createType())
val s2 = serializer(c::class.createType())
最后两种方法似乎更强大:例如,我可以将它用于多态序列化,获取抽象类型实例的实际 KClass 并选择正确的序列化器。
我有几个问题:
- 实际存在哪些按类型获取序列化程序的方法,哪些方法是可取的?
- 据我了解,我可以为一个类注册多个序列化程序,那么在每种情况下我会得到哪一个呢?
- 假设我已经使用 为一个类注册了一个自定义序列化程序
@Serializable(with=...)
,是否有可能以某种方式为其获取标准序列化程序?