Kotlin中内部类的变量隐藏:如何解析变量?

安德鲁·库列索夫(Andrew Kuleshov)

我在Kotlin中有以下代码片段。我喜欢这样的代码难题,但是这里的结果对我来说太出乎意料了。有人可以描述我为什么打印1而不打印2吗?

由于Java中禁止阴影-看来我完全不了解它在Kotlin中的工作方式。

fun main() {
    var a = 1
    class A {
        var a = 2

        fun foo() = a
    }

    println(A().foo())
}

===========奖励============

有趣的是,当您var a = 1在类声明正常运行并打印后移动以下代码时2

fun main() {
    
    class A {
        var a = 2

        fun foo() = a
    }

    var a = 1
    println(A().foo())
}

UPD:看来Kotlin突然决定像C ++一样玩,并且具有未定义的行为:D

Kotlin规格use this with caution, because in some cases it can be called instead

Aplet123

当您var a = 2在中执行操作时class A实际上并没有隐藏任何变量您声明这aclass字段A默认为2。

当您在类的前面引用变量时,如果存在一个具有该名称的字段,但没有具有该名称的上层变量,则Kotlin将添加一个隐式this(例如,a变成this.a因此,外部优先于该字段,并且您必须使用来访问内部athis.aa

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章