java - 了解 Java 匿名类?

标签 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();
            }
        };
    }
}

最佳答案

匿名类声明中的 block 不是“匿名方法”;它是一个“实例初始化程序”。参见 JLS 8.6 ,它表示“在创建类的实例时执行在类中声明的实例初始化程序”。因此,当代码创建新对象 testClass 时,它还会执行初始化程序,它会调用 getValue() 并将结果存储在本地 boolean 中多变的。但是,这个变量是初始化 block 的本地变量,因此在初始化程序执行完毕后,该值将不再可访问。因此,正如所写的那样,实例初始化程序没有做任何有用的事情。 (但是,如果您只是为了让代码片段更小而删减大量代码,我可以理解。)

关于java - 了解 Java 匿名类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35595305/

相关文章:

Java wait() 和 notifyAll() 恢复最旧的线程

java - GenericDAO 从接口(interface)继承

java - 使用 Hibernate 的二级缓存时的默认缓存时间是多少

java - 将一个列表中的元素添加到另一个列表中

java - Apache HttpClient 4.3 SocketConfig.getSoTimeout() 与 RequestConfig.getSocketTimeout()

java - 尝试删除所有缓存时 Ehcache 中出现异常

java - R.java android studio 中 GradientColor_fontVariationSettings 的重复实例

Java WebStart : <property . ..> 使用 <extension> 时被忽略?

java - 如何找出一个java正在运行的进程的命令?

java - Java 中类似 chroot 的环境?