전문 트리 컬렉션을 만들고 있는데 null
대신 NIL
개의 노드가 필요합니다. 인위적인 예를 들어 :일반 클래스의 NIL 노드 설계
public interface Value<V> {
boolean hasValue(V value);
}
public class Node<V> implements Value<V> {
private static final Value<V> NIL = new Value() {
public boolean hasValue(V value) {
return false;
}
}
private Value<V> next = NIL;
private V value;
public boolean hasValue(V value) {
return this.value.equals(value) || next.hasValue(value);
}
}
나는 정적 멤버 NIL
는 제네릭 형식 V
을 사용하고 있기 때문에이 코드가 불법 알고 있습니다. 그 이유에 대한 좋은 설명은 java static class Singleton with generic입니다. 그러나 유형에 관계없이 단일 인스턴스 여야한다는 하이라이트가 있습니다. 제 경우에는 정상적으로 작동합니다 : NIL
의 동작은 동일합니다.
이 경우 몇 가지 간단한 해결 방법이 있지만 사용중인 경우에는 각각 NIL
의 몇 가지 변형이 있으며 인터페이스의 동작을 재정의합니다.
NIL
을 별도의 클래스로 만들고 상수를 사용하는 대신 새 인스턴스를 만들 수 있지만 매우 큰 컬렉션을 처리하고 실제로 어떤 상태도 유지하지 않는 많은 개체의 오버 헤드를 원하지는 않습니다.
일반 유형을 사용하는 메소드를 대체하는 기능을 유지하면서 단일 상수 오브젝트를 갖는 우아한 방법이 있습니까? 그렇지 않은 경우 동일한 결과를 얻는 대체 설계가 있습니까?