Разработка интерфейса для иерархической сущности
Я должен разработать интерфейс для иерархической сущности:
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
в результат?