我有一个 Kotlin 项目,我在其中使用 Java 库依赖项,该依赖项定义了一个带有 String name() 方法声明的接口(interface)。
在 Java 中,我可以在枚举声明中使用此接口(interface),其中 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 枚举类中尝试此操作,我会收到 [CONFLICTING INHERITED JVM DECLARATIONS] 错误,因为名称“name”存在冲突。 我尝试使用 @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)?
谢谢
最佳答案
据我所知,现在您的最佳选择如下:
interface Aspect2: Aspect {
fun myName() = name()
}
enum class CollisionType : Aspect2 {
………
}
等等
关于java - 使用 String name() 声明实现 Java 接口(interface)的 Kotlin 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47848967/