Разработка интерфейса для иерархической сущности

Я должен разработать интерфейс для иерархической сущности:

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 в результат?

Ответы на вопрос(3)

Ваш ответ на вопрос