And*_*eas 5 java enums interface kotlin
我有一个Kotlin项目,在这里我利用Java库依赖项来定义带有String name()方法声明的接口。
在Java中,我可以在枚举声明中使用此接口,其中String name()方法由枚举隐式实现。
public interface Aspect {
int index();
String name();
}
Run Code Online (Sandbox Code Playgroud)
在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();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在Kotlin枚举类中尝试此操作,则会由于名称“名称”冲突而收到[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
}
Run Code Online (Sandbox Code Playgroud)
给出错误:“ @ JvmName批注不适用于此声明”
是否有可能在Kotlin的枚举类中实现/使用给定的Java接口定义String name()方法?
谢谢
据我所知,现在最适合您的选择如下:
\n\ninterface Aspect2: Aspect {\n fun myName() = name()\n}\nenum class CollisionType : Aspect2 {\n \xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\n}\nRun Code Online (Sandbox Code Playgroud)\n\n等等
\n| 归档时间: |
|
| 查看次数: |
1075 次 |
| 最近记录: |