小编And*_*eas的帖子

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

我有一个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()方法? …

java enums interface kotlin

5
推荐指数
1
解决办法
1075
查看次数

标签 统计

enums ×1

interface ×1

java ×1

kotlin ×1