繁体   English   中英

Kotlin枚举用String name()声明实现Java接口

[英]Kotlin enum implementing a Java Interface with String name() declaration

我有一个Kotlin项目,我使用Java库依赖项来定义一个带有String name()方法声明的接口。

在Java中,我能够在枚举声明中使用此接口,其中String name()方法由枚举隐式实现。

public interface Aspect {
   int index();
   String name();
}

在Java中,这是可能的:

public enum CollisionType implements Aspect {
    ONE, TWO, THREE;

    private final Aspect aspect;
    private CollisionType() {
        aspect = CONTACT_ASPECT_GROUP.createAspect(name());
    }
    @Override
    public int index() {
        return aspect.index();
    }
}

如果我在Kotlin枚举类中尝试这个,我会因为名称“name”冲突而得到[CONFLICTING INHERITED JVM DECLARATIONS]错误。 我试图使用@JvmName注释来定义一个不同的名称,因为它建议通过这种问题来做,但我无法正确使用它来解决这个问题。

enum class CollisionType : Aspect {
    ONE, TWO, TREE;
    val aspect: Aspect = CONTACT_TYPE_ASPECT_GROUP.createAspect(name())

    override fun index(): Int = aspect.index()
    @JvmName("aspectName")
    override fun name(): String = name
}

给出错误:“@JvmName注释不适用于此声明”

是否有可能在Kotlin的枚举类中实现/使用定义String name()方法的给定Java接口?

谢谢

据我所知,现在最好的选择是:

interface Aspect2: Aspect {
  fun myName() = name()
}
enum class CollisionType : Aspect2 {
  ………
}

等等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM