階層エンティティのインターフェイスを設計する必要があります。
interface HierarchicalEntity<T extends HierarchicalEntity<T>> {
T getParent();
Stream<T> getAncestors();
}
前者がすべての祖先を返すような方法で、デフォルト getAncestors()
のメソッドを実装するのは非常に簡単です。getParent()
Stream
実装例:
default Stream<T> getAncestors() {
Stream.Builder<T> parentsBuilder = Stream.builder();
T parent = getParent();
while (parent != null) {
parentsBuilder.add(parent);
parent = parent.getParent();
}
return parentsBuilder.build();
}
しかしthis
、ストリームにも含める必要があり、ここで問題が発生します。this
次の行は、 タイプHierarchicalEntity
が ではなくであるため、正しくありませんT
。
parentsBuilder.add(this); // type mismatch!
getAncestors()
結果に含めるためにインターフェイスを再設計するにはどうすればよいthis
ですか?