以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()
方法呢?
答案 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方法名称?