我有一个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接口?
由于
答案 0 :(得分:0)
据我所知,现在最好的选择是:
interface Aspect2: Aspect {
fun myName() = name()
}
enum class CollisionType : Aspect2 {
………
}
等等