是否可以在 Kotlin 接口中指定静态函数?

Is it possible to specify a static function in a Kotlin interface?

我想做这样的事情:

interface Serializable<FromType, ToType> {
    fun serialize(): ToType
    companion object {
        abstract fun deserialize(serialized: ToType): FromType
    }
}

甚至这对我也有用:

interface Serializable<ToType> {
    fun serialize(): ToType
    constructor(serialized: ToType)
}

但都无法编译。 有这方面的语法吗,或者我会被迫使用使其成为工厂的接口吗? 或者有其他答案吗?那太好了!

基本上,companion object 中的任何内容都不能是 abstractopen(因此会被覆盖),并且无法要求实现的 companion objects在接口中有一个方法或define/require一个构造函数。

一个可能的解决方案是将这两个函数分成两个接口:

interface Serializable<ToType> {
    fun serialize(): ToType
}

interface Deserializer<FromType, ToType> {
    fun deserialize(serialized: ToType): FromType
}

这样,您将能够在 class 中实现第一个接口并使其 companion object 实现另一个接口:

class C: Serializable<String> {
    override fun serialize(): String = "..."

    companion object : Deserializer<C, String> {
        override fun deserialize(serialized: String): C = C()
    }
}

此外, 有一个严格的限制,因此这种通过接口实现序列化的模型可能无法扩展,不允许具有不同 ToTypes 的多个实现。