Java:初始化某些内容的次数

时间:2016-11-28 20:24:12

标签: 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; }
    }
    ...
}

我的直觉是它必须是公共静态决赛......&#39;只有一个对象可以在整个类中为EMPTY初始化。

来自page 99-100 of Data Structures Into Java

1 个答案:

答案 0 :(得分:4)

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

这当然是有效的,但不是&#34;正常&#34;要做的事。当然,我认为静态实际上是优秀OO设计中的异常的人;但Java语言允许使用 static ;并且(除非在此处未显示的代码中有充分的理由)......合理的方法是使共享静态EMPTY树保持不变。

但是那个代码看起来很奇怪 - 什么是&#34;意义&#34;有一个isEmpty()方法返回总是假的例子?!

我的直觉&#34;在这里:我会退后一步,对该代码进行全面审查,以了解是否有更多&#34;更多&#34;该课程中的惊喜。