首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Kotlin中,当枚举类实现接口时,如何处理继承的声明冲突?

在Kotlin中,当枚举类实现接口时,如何处理继承的声明冲突?
EN

Stack Overflow用户
提问于 2017-06-14 19:27:25
回答 2查看 1.2K关注 0票数 11

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

代码语言:javascript
运行
复制
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

我理解来自Enum类的Enum方法和来自RelationshipType接口的name()方法都具有相同的签名。这在Java中不是问题,那么为什么它在Kotlin中是一个错误,我如何处理它呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-14 20:16:50

它是一个

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

代码语言:javascript
运行
复制
interface Name {
    fun name(): String;
}


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

您可以通过使用sealed类来模拟enum类,例如:

代码语言:javascript
运行
复制
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);
票数 14
EN

Stack Overflow用户

发布于 2019-03-20 14:12:56

上面的例子是使用一个具有属性name而不是函数name()的接口。

代码语言:javascript
运行
复制
interface Name {
    val name: String;
}

enum class Color : Name {
    Blue
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44553148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档