kotlin - V1.0.1中无法识别的Kotlin扩展属性

标签 kotlin kotlin-extension

重新访问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)时,它会被识别。

最佳答案

在Kotlin的任何预发行版本中,都不可能使用类的属性来覆盖扩展属性,在1.0.1中也不可能。扩展属性被编译为静态方法,访问扩展属性的代码只是调用静态方法。不可能根据接收者的类型执行动态分配。

没有覆盖,extension属性将起作用。您需要确保已将其导入到尝试访问它的位置。

关于kotlin - V1.0.1中无法识别的Kotlin扩展属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191305/

相关文章:

java - Kotlin 的多平台依赖问题

android - Unresolved kotlin android 扩展

kotlin - 错误 : Exception in thread "main" java. lang.NumberFormatException:对于输入字符串: "kotlin.Unit"

java - IntelliJ 运行带有 @Ignore 注释的 Kotlin 测试

android - Exoplayer Mediaplayer Android延迟应用PlaybackParameters

JavaFX valueAt() 绑定(bind)仅计算一次

Kotlin 内联扩展属性

kotlin - 将参数传递给 kotlin 中的自定义 getter

kotlin:扩展方法和空接收器

android - 如何在 Kotlin Android 中正确使用 URL