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

我有一个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”,我得到一个[冲突的遗留的JVM DECLARATIONS]错误。 我试图使用@JvmName注释来定义一个不同的名称,因为这种types的问题是建议做的,但是我无法正确使用这个问题。

 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的枚举类中实现/使用给定的Java接口来定义String name()方法?

谢谢

据我所见,现在最适合你的选择是:

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

等等