我遇到了以下代码,但很难理解它。
这是使用匿名类+匿名方法吗?
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();
}
};
}
}
最佳答案
匿名类声明中的 block 不是“匿名方法”;它是一个“实例初始化程序”。参见 JLS 8.6 ,它表示“在创建类的实例时执行在类中声明的实例初始化程序”。因此,当代码创建新对象 testClass
时,它还会执行初始化程序,它会调用 getValue()
并将结果存储在本地 boolean
中多变的。但是,这个变量是初始化 block 的本地变量,因此在初始化程序执行完毕后,该值将不再可访问。因此,正如所写的那样,实例初始化程序没有做任何有用的事情。 (但是,如果您只是为了让代码片段更小而删减大量代码,我可以理解。)
关于java - 了解 Java 匿名类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35595305/