Java中的Class.this和this有什么不同?
有两种方法可以引用该类中的类的实例。 例如:
class Person { String name; public void setName(String name) { this.name = name; } public void setName2(String name) { Person.this.name = name; } }
一个使用this.name
来引用对象字段,而另一个使用className.this
来引用对象字段。 这两个引用有什么区别?
在这种情况下,他们是一样的。 当你有一个需要引用其外部类的实例的非静态嵌套类时, Class.this
语法是非常有用的。
class Person{ String name; public void setName(String name){ this.name = name; } class Displayer { String getPersonName() { return Person.this.name; } } }
这个语法只有在嵌套类时才会变得相关:
class Outer{ String data = "Out!"; public class Inner{ String data = "In!"; public String getOuterData(){ return Outer.this.data; // will return "Out!" } } }
你只需要为内部类使用className.this。 如果你不使用它们,不要担心。
Class.this
对于引用一个不是静态的Class.this
是有用的。
要实例化一个非静态的InnerClass
,你必须首先实例化InnerClass
。 因此,一个非静态的InnerClass
将始终有一个InnerClass
的引用,并且所有的InnerClass
的字段和方法都可以被InnerClass
。
public static void main(String[] args) { OuterClass outer_instance = new OuterClass(); OuterClass.InnerClass inner_instance1 = outer_instance.new InnerClass(); OuterClass.InnerClass inner_instance2 = outer_instance.new InnerClass(); ... }
在这个例子中,两个Innerclass
都是从相同的Innerclass
类实例化的,因此它们都具有相同的Outerclass
引用。