TestClass.this.onError(error);
我认为这是java中的关键,类名如何跟随?这是java的特殊功能吗?
这是一种从内部类中访问封闭类的隐式实例的方法。例如:
public class Test {
private final String name;
public Test(String name) {
this.name = name;
}
public static void main(String[] args) {
Test t = new Test("Jon");
// Create an instance of NamePrinter with a reference to the new instance
// as the enclosing instance.
Runnable r = t.new NamePrinter();
r.run();
}
private class NamePrinter implements Runnable {
@Override public void run() {
// Use the enclosing instance's name variable
System.out.println(Test.this.name);
}
}
}
有关内部类和封闭实例的更多信息,请参见Java 语言规范第 8.1.3节,有关“限定”表达式的更多信息,请参见第 15.8.4 节:this
任何词法封闭的实例(第 8.1.3 节)都可以通过显式限定关键字 this 来引用。
让
C
是 表示的类ClassName
。设 n 是一个整数,它C
是出现限定 this 表达式的类的第 n 个词法封闭类。表单表达式的值
ClassName.this
是 this 的第 n 个词法封闭实例。表达式的类型是
C
。
从内部类中,您正在从包含它的 TestClass 实例调用一个即时方法。
您可以从类的内部类中使用它,它将引用外部类。
例如,如果您有 Cat 类
public class Cat {
private int age;
private Tail tail;
public Cat(int age) {
this.age = age;
this.tail = new Tail();
}
class Tail {
public void wave() {
for(int i = 0; i < Cat.this.age; i++) {
System.out.println("*wave*");
}
}
}
public Tail getTail() {
return tail;
}
/**
* @param args
*/
public static void main(String[] args) {
new Cat(10).getTail().wave();
}
}