理解Java匿名类?
我遇到了以下代码,很难理解
这是使用匿名类+匿名方法吗
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();
}
};
}
}
# 1 楼答案
匿名类声明中的块不是“匿名方法”;它是一个“实例初始化器”。参见JLS 8.6,它表示“在创建类的实例时,将执行在类中声明的实例初始值设定项”。因此,当代码创建新对象
testClass
时,它还执行初始化器,该初始化器调用getValue()
,并将结果存储在局部boolean
变量中。但是,该变量是初始值设定项块的局部变量,因此在初始值设定项执行完毕后,将无法再访问该值。如前所述,实例初始值设定项没有做任何有用的事情。(但是,如果您为了使代码片段更小而删减了大量代码,我可以理解这一点。)