对于C类,您可以使用身体内部熟悉的this
来引用当前实例,但this
实际上是Scala中C.this的简写:
class C {
var x = "1"
def setX1(x:String) = this.x = x
def setX2(x:String) = C.this.x = x
}
我无法理解C.this
,C是一个类,我无法理解为什么我们在C
和this
之间使用点,如{{1}所示1}?
答案 0 :(得分:1)
我无法理解为什么我们在C和它之间使用点,如图所示 C.this
在this
之前使用类名称在Java中称为Qualified this(请参阅Using "this" with class name),在Scala中类似。当您想要从内部类引用外部类时,可以使用它。例如,我们假设您在C
课程中有一个方法声明,您希望在其中调用this
并表示“C
的此引用:
class C {
val func = new Function0[Unit] {
override def apply(): Unit = println(this.getClass)
}
}
new C().func()
收率:
class A$A150$A$A150$C$$anon$1
您在anon$1
名称的末尾看到getClass
了吗?这是因为在函数实例中,this
实际上是函数类。但是,我们实际上想要引用this
类型的C
。为此,你做:
class C {
val func = new Function0[Unit] {
override def apply(): Unit = println(C.this.getClass)
}
}
new C().func()
收率:
class A$A152$A$A152$C
注意最后的C
而不是anon$1
。