Java:某些东西被初始化的次数

标签 java

我看到了下面的代码,想知道每个 Tree 实例是否会引用不同的 EMPTY 对象,或者它是否会为所有树实例引用相同的对象(仅实例化一次)。

class Tree<T> {
    public final Tree<T> EMPTY = new EmptyTree<T> ();

    /** True iff THIS is the empty tree. */
    public boolean isEmpty () { return false; }

    private static class EmptyTree<T> extends Tree<T> {
        /** The empty tree */
        private EmptyTree () { }
        public boolean isEmpty () { return true; }
    }
    ...
}

我的直觉是它必须是“public static final....”才能在整个类中为 EMPTY 初始化一个对象。

来自 page 99-100 of Data Structures Into Java

最佳答案

你是对的。此代码每次都使用一个新的 EMPTY 对象。

这当然是有效的,但不是“正常”的事情。当然,我是那些说 static 实际上是好的 OO 设计中的异常的人之一;但是Java语言允许使用static;并且(除非在此处未显示的代码中有充分的理由)......合理的方法是拥有一个共享静态 EMPTY Tree 常量。

但是该代码无论如何看起来都很奇怪 - 例如,isEmpty() 方法总是返回 false 的“意义”是什么?!

我的“直觉”是:我会退后一步,全面审查该代码,以了解该类中是否有“更多”惊喜。

关于Java:某些东西被初始化的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40852807/

相关文章:

java - 如何通过位操作反转 View 的可见性

java - 如何根据用户输入创建表?

java - 关闭 http 输入流

java - ExtJS 网格过滤器自动从存储中的数据创建可能选项的列表

java - 编码或解码文本: Problem displaying output

java - 创建最大公约数程序,但数组参数有问题

java - Primefaces 3.0 : TreeNode and ContextMenu

java - 使用发送网格发送电子邮件附件

java - 努力将 JSON 负载映射到模型类

Java、Struts2 和 AJAX。需要一些指示