0
 TestClass.this.onError(error);

我认为这是java中的关键,类名如何跟随?这是java的特殊功能吗?

4

3 回答 3

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 语言规范第 8.1.3节,有关“限定”表达式的更多信息,请参见第 15.8.4 节:this

任何词法封闭的实例(第 8.1.3 节)都可以通过显式限定关键字 this 来引用。

C是 表示的类ClassName。设 n 是一个整数,它C是出现限定 this 表达式的类的第 n 个词法封闭类。

表单表达式的值ClassName.this是 this 的第 n 个词法封闭实例。

表达式的类型是C

于 2012-12-23T13:35:59.023 回答
1

从内部类中,您正在从包含它的 TestClass 实例调用一个即时方法。

于 2012-12-23T13:36:19.230 回答
1

您可以从类的内部类中使用它,它将引用外部类。

例如,如果您有 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();
}

}
于 2012-12-23T13:36:22.683 回答