And*_*hov 5 java shadowing kotlin
我在 Kotlin 中有以下代码片段。我喜欢这样的代码难题,但这里的结果对我来说太出乎意料了。有人可以描述我为什么打印1而不是打印2吗?
由于 Java 中禁止阴影 - 看起来我完全不明白它在 Kotlin 中是如何工作的。
fun main() {
var a = 1
class A {
var a = 2
fun foo() = a
}
println(A().foo())
}
Run Code Online (Sandbox Code Playgroud)
============ 奖金 ============
有趣的是,当您var a = 1在类声明后移动时以下代码工作正常并打印2:
fun main() {
class A {
var a = 2
fun foo() = a
}
var a = 1
println(A().foo())
}
Run Code Online (Sandbox Code Playgroud)
UPD:看起来 Kotlin 突然决定像 C++ 一样玩并且有未定义的行为:D
从科特林规格:use this with caution, because in some cases it can be called instead。
当您var a = 2在 内部执行此操作时class A,您实际上并没有隐藏任何变量。您声明这是class 的a一个字段A,并且默认为 2。
当您在类前面引用变量时,如果存在具有该名称的字段但没有具有该名称的上层变量,this Kotlin 将添加一个隐式(例如a变为) 。因此,外部优先于字段,并且您必须使用来访问内部。this.aathis.aa
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |