以下代码段的含义是什么?

时间:2012-12-23 13:33:22

标签: java

 TestClass.this.onError(error);

我认为这是java中的关键字,一个类名怎么跟着这个呢?这是一个特别的 java的功能?

3 个答案:

答案 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();
}

}