我遇到了下面的代码,并想知道每个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初始化。
答案 0 :(得分:4)
你是对的。此代码每次都使用新 EMPTY对象。
这当然是有效的,但不是&#34;正常&#34;要做的事。当然,我认为静态实际上是优秀OO设计中的异常的人;但Java语言允许使用 static ;并且(除非在此处未显示的代码中有充分的理由)......合理的方法是使共享静态EMPTY树保持不变。
但是那个代码看起来很奇怪 - 什么是&#34;意义&#34;有一个isEmpty()
方法返回总是假的例子?!
我的直觉&#34;在这里:我会退后一步,对该代码进行全面审查,以了解是否有更多&#34;更多&#34;该课程中的惊喜。