階層エンティティのインターフェイスを設計する必要があります。
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ですか?