我遇到了以下代码,并且很难理解它。
这是使用匿名类+匿名方法吗?
public class TestClass {
protected boolean getValue() {
return true;
}
}
public class Main {
public static void main(String[] args) {
TestClass testClass = new TestClass() {
{
// call TestClass.getValue()
boolean value = getValue();
}
};
}
}
答案 0 :(得分:4)
匿名类声明中的块不是"匿名方法&#34 ;;它是一个"实例初始化程序"。请参阅JLS 8.6,其中说明"在创建类的实例时执行类中声明的实例初始化程序"。因此,当代码创建新对象testClass
时,它还会执行初始化程序,该程序会调用getValue()
并将结果存储在本地boolean
变量中。但是,此变量对于初始化程序块是本地的,因此在初始化程序执行完毕后将无法再访问该值。因此,编写时,实例初始化程序不会执行任何有用的操作。 (但是,如果为了使代码片段更小而删除大量代码,我可以理解。)