你得到一个StackOverflow因为总是调用父构造函数(另见:https ://stackoverflow.com/a/527069/664108 )。在您的情况下,这会导致无休止的递归。
为避免这种情况,您必须在构造函数中添加一个检查Node
并从构造函数显式调用它NullNode
:
public class Node
{
Node nextNode;
char key;
Node prevNode;
Node() {
Node(true);
}
Node(boolean createNullNodes) {
if (createNullNodes) {
nextNode = new NullNode();
prevNode = new NullNode();
}
}
}
public class NullNode extends Node
{
NullNode() {
super(false);
}
}
NullObject 模式的一个更好的解决方案是使用接口。这消除了构造函数问题,还nextNode
允许prevNode
从NullNode
.
接口示例:
public interface INode
{
public char getKey();
public INode getNext();
public INode getPrev();
// ...
}
public class Node implements INode
{
Node nextNode;
char key;
Node prevNode;
Node() {
nextNode = new NullNode();
prevNode = new NullNode();
}
public char getKey() {
return key;
}
public INode getNext() {
return nextNode;
}
public INode getPrev() {
return prevNode;
}
}
public class NullNode implements INode
{
public char getKey() {
return null;
}
public INode getNext() {
return this;
}
public INode getPrev() {
return this;
}
}