gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:31:49 24 4
gpt4 key购买 nike

我想做这样的事情:

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

甚至这对我也有用:

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

但都不编译。 是否有这样的语法,或者我是否会被迫使用 make this 作为工厂的接口(interface)? 或者还有其他答案吗? 😮 那太好了!

最佳答案

基本上,companion object 中的任何内容都不能是 abstractopen(因此会被覆盖),并且没有办法要求implementations 的 companion object 具有方法或在接口(interface)中定义/需要构造函数。

您可能的解决方案是将这两个功能分成两个接口(interface):

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

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

这样,您将能够实现类中的第一个接口(interface),并使其companion object实现另一个:

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

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

另外,only a single generic specialization of a type can be used as a supertype 还有一个严重的限制。 ,因此这种通过接口(interface)实现进行序列化的模型可能会变得不够可扩展,不允许具有不同 ToTypes 的多个实现。

关于interface - 是否可以在 Kotlin 接口(interface)中指定静态函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40370471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com