如何从kotlin访问enum的“重写” name()方法?

时间:2019-08-06 16:31:58

标签: java kotlin

以AWS 1.11 java sdk中的Regions枚举为例。此类包含String getName()方法。在Kotlin中使用AWS开发工具包进行开发时,此方法提供为

Regions.EU_CENTRAL_1.name

IntelliJ自动完成弹出窗口甚至说(来自getName())来通知您the compiler treats the getter like a property

当您注意到这一点时,问题就显而易见

new AmazonS3ClientBuilder
    .standard()
    .withRegion(Regions.EU_CENTRAL_1.getName())
    .build()

可在Java中运行,而等效的

AmazonS3ClientBuilder
    .standard()
    .withRegion(Regions.EU_CENTRAL_1.name)
    .build()

在Kotlin中不起作用。使用Java打印以下内容显示了这种情况:

System.out.println(Regions.EU_CENTRAL_1.getName()); // prints "eu-central-1"
System.out.println(Regions.EU_CENTRAL_1.name()); // prints "EU_CENTRAL_1"

我如何从Kotlin访问Java枚举上的.getName()方法,而Kotlin更喜欢使用.name()方法呢?

1 个答案:

答案 0 :(得分:0)

如评论所建议:

// Kotlin
Regions.EU_CENTRAL_1.name

科特林决定解决

// Java
Regions.EU_CENTRAL_1.name()

在Java中,而

// Kotlin
Regions.EU_CENTRAL_1.getName()

可用于访问getName()枚举的函数Regions

这又引出了一个问题:属性解析规则使用什么特定的kotlin编译器Java方法名称?