muszę zaprojektować interfejs do hierarchicznej jednostki:interfejs Projektowanie dla hierarchicznej jednostki
interface HierarchicalEntity<T extends HierarchicalEntity<T>> {
T getParent();
Stream<T> getAncestors();
}
Jest to dość łatwe do wdrożenia domyślnygetAncestors()
metody pod względem getParent()
w taki sposób, aby były wróci Stream
z wszyscy przodkowie.
przykładem realizacji:
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();
}
Ale muszę także this
do strumienia, i tu pojawia się problem. Poniższy wiersz nie jest prawidłowe, ponieważ this
jest typu HierarchicalEntity
nie T
:
parentsBuilder.add(this); // type mismatch!
Jak mogę przeprojektowanie interfejsu w celu uczynienia getAncestors()
obejmują this
na wynik?
Niestety to nigdy nie będzie w pełni typu bezpieczne. Java nie ma składni typu self-referencyjnego. Mogę utworzyć 'class Fake implementuje HierarchicalEntity' i twoje 'getAncestors' prawdopodobnie przestanie z' ClassCastException' ostatecznie. –
Masz rację. Być może można przeprojektować cały interfejs. – Aliaxander
Po prostu wyślij 'to' do' T' i dodaj do konstruktora strumienia –