Laut einer Literatur, die wir lesen, haben wir saftige Früchte implementign die folgende Schnittstelle:begrenzt generische Methode mit ‚Super‘ Typ
public interface Juicy<T> {
Juice<T> squeeze();
}
beschränkten Typen Variablen verwenden, die Methode folgende würde ein Bündel von Früchten taks und quetscht sie alle:
<T extends Juicy<T>> List<Juice<T>> squeeze(List<T> fruits);
Jetzt brauchen wir niedrigere Geschwister, wie unten zu arbeiten:
class Orange extends Fruit implements Juicy<Orange>;
class RedOrange extends Orange;
Also ich würde das Verfahren erwarten, wie folgt aussehen:
<T extends Juicy<T>> List<Juice<? super T>> squeeze(List<? extends T> fruits);
Stattdessen finde ich die Methodensignatur, wie unten zu sein:
<**T extends Juicy<? super T>>** List<Juice<? super T>> squeezeSuperExtends(List<? extends T> fruits);
Was dieser Unterschied erklärt?
Sollte das nicht 'sein öffentliche Schnittstelle Juicy>'? (um zu verhindern, dass die Klasse Orange sich ausdehnt Obst verwendet Juicy ') –
SLaks
@SLaks: Es ist kein großer Gewinn, als wenn' Apple' 'Juicy' implementiert hätte, dann würde der Fall, den Sie erwähnen, nicht verhindert werden. –
@MarkPeters: Du hast recht; Es gibt keine Möglichkeit, das zu verhindern. Es würde jedoch verhindern, "Klasse Orange erstreckt sich Obst Geräte Juicy" –
SLaks