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

标签 java enums interface kotlin

我有一个 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/

相关文章:

java - H2 数据库中的长字符串数据类型

java - 将按钮添加到 jtable

c - VS 2010 中的枚举大小选项

java - 迭代枚举元素以创建新对象时出现不兼容类型错误

java - 通用类型扩展了接口(interface),但出现不兼容类型错误

c++ - 在 C++ 中通过接口(interface)的最佳方式?

java - 是否有一个通用的 Java 库可以处理一组字符串的 URL 编码/解码?

java - Maven 2 - 从传递依赖版本定义依赖版本

使用枚举的 C# 事件处理程序

java - OOP任务(类层次结构、继承、接口(interface)等)