重新访问 Kotlin 1.0.1 之前版本的一些代码,我的扩展属性似乎不再有效。事实上,它仍然可以,但我不能再覆盖它。
考虑这个类:
class TestClass {
override val loggerName: String
get() = "A new name"
fun aMethod() {
info("test info message")
}
}
如果您有以下扩展,则在 Kotlin 1.0.1 之前,这将起作用:
val Any.loggerName: String
get() = javaClass.simpleName!!
fun Any.info(message: String) {
//...
}
loggerName 默认情况下会采用相关实例的类名。目前,在这种情况下,loggerName 已正确分配给TestClass,但是我无法覆盖它。
这是 Kotlin 新版本中的意外错误还是新限制?我搜索了Kotlin - Extensions,但只发现它应该可以工作。
技术:
我正在使用 Kotlin 插件版本 1.0.1-release-IJ143-32 在 IntelliJ IDEA 2016.1 中对此进行测试。
编辑1:
TestClass 甚至无法识别此属性,但是当访问 TestClass 的实例(例如:)时,instanceOfTestClass.loggerName
它会被识别。