gpt4 book ai didi

enums - 在 Kotlin 中,当枚举类实现接口(interface)时,如何解决继承的声明冲突?

转载 作者:IT老高 更新时间:2023-10-28 13:38:29 36 4
gpt4 key购买 nike

我定义了一个实现 Neo4j 的 RelationshipType 的枚举类:

enum class MyRelationshipType : RelationshipType {
// ...
}

我收到以下错误:

Inherited platform declarations clash: The following declarations have the same JVM signature (name()Ljava/lang/String;): fun <get-name>(): String fun name(): String

我了解 name()来自 Enum 的方法类和 name()来自 RelationshipType 的方法接口(interface)具有相同的签名。不过这在 Java 中不是问题,那么为什么在 Kotlin 中会出现错误,我该如何解决呢?

最佳答案

它是 bug-KT-14115即使您使 enum 类实现了包含 name() 函数的 interface,也会被拒绝。

interface Name {
fun name(): String;
}


enum class Color : Name;
// ^--- the same error reported

但是您可以使用 sealed 类来模拟 enum 类,例如:

interface Name {
fun name(): String;
}


sealed class Color(val ordinal: Int) : Name {
fun ordinal()=ordinal;
override fun name(): String {
return this.javaClass.simpleName;
}
//todo: simulate other methods ...
};

object RED : Color(0);
object GREEN : Color(1);
object BLUE : Color(2);

关于enums - 在 Kotlin 中,当枚举类实现接口(interface)时,如何解决继承的声明冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44553148/

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