我想要一个父接口/抽象类上的方法,它利用泛型方法传入实现类的类。
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 中执行此操作。