TestClass.this.onError(error);
我认为这是java中的关键字,一个类名怎么跟着这个呢?这是一个特别的 java的功能?
答案 0 :(得分:9)
这是一种从内部类中访问封闭类的隐式实例的方法。例如:
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 Language Specification section 8.1.3;有关“this
”限定条件,请参阅section 15.8.4:
任何词汇封闭的实例(第8.1.3节)都可以通过明确限定关键字this来引用。
让
C
成为ClassName
表示的类。设n是一个整数,使得C
是合法的这个表达式出现的类的第n个词汇封闭类。
ClassName.this
形式的表达式的值是第二个词汇封闭的实例。表达式的类型为
C
。
答案 1 :(得分:1)
从一个内部类中,你从TestClass实例中调用一个instante方法来构建它。
答案 2 :(得分:1)
你可以在类的内部类中使用它,它将引用外部类。
例如,如果你有班级猫
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();
}
}