【发布时间】:2021-11-30 19:08:18
【问题描述】:
我想要一个父接口/抽象类上的方法,该方法利用泛型方法传入实现类的类。
interface Domain {
fun toJSON(): String { return Json.encodeToString(this) }
}
@Serializable
class User: Domain {
val a: Int
}
这不起作用,因为Json.encodeToString 不知道“this”的类别。
@Serializable 似乎实现了KSerializer,所以理论上我可以要求域从它继承,但该接口是模板化的。并且标记实现类@Serializable 似乎直到编译时才实现KSerializer,因此会产生错误。
如何实现这个toJSON() 方法或告诉Domain 它的实现者必须是@Serializable / KSerializer?
我也试过了:
interface Domain<T> {
fun toJSON(): String { return Json.encodeToString(this) }
}
@Serializable
class User: Domain<User> {
val a: Int
}
但这会导致:
kotlin.IllegalStateException: Only KClass supported as classifier, got T
所有这一切的另一个复杂因素是我试图在 KMM 中执行此操作。
【问题讨论】:
-
添加扩展功能怎么样?
-
@sidgate 感谢您的想法。我添加了有趣的 KSerializer.toJSON(),但它需要 KSerializer
这让我回到上述问题。