Zgodnie literaturze czytałem, mamy soczyste owoce implementign następujący interfejs:ograniczony sposób ogólny z „super” typu
public interface Juicy<T> {
Juice<T> squeeze();
}
Korzystanie ograniczone zmienne typu, następujące metody byłoby taks kiść owoców i ścisnąć je wszystkich:
<T extends Juicy<T>> List<Juice<T>> squeeze(List<T> fruits);
teraz musimy niższe rodzeństwo jak poniżej pracować zbyt:
class Orange extends Fruit implements Juicy<Orange>;
class RedOrange extends Orange;
Więc spodziewałbym metoda wyglądać następująco:
<T extends Juicy<T>> List<Juice<? super T>> squeeze(List<? extends T> fruits);
Zamiast znajdę podpis metoda być jak poniżej:
<**T extends Juicy<? super T>>** List<Juice<? super T>> squeezeSuperExtends(List<? extends T> fruits);
Co tłumaczy tę różnicę?
że nie powinno być 'public interface Juicy>'? (aby zapobiec "klasy Orange rozszerza Owoce implementuje Juicy ') –
SLaks
@SLaks: To nie jest wielki zysk, jak gdyby 'Apple' wdrożony' Juicy 'wtedy wspomniany przypadek nie zostanie powstrzymany. –
@MarkPeters: Masz rację; nie ma sposobu, aby temu zapobiec. Zapobiegnie to jednak "rozwojowi klasy Orange w owocach Juicy" –
SLaks