Come da una letteratura che ho letto, che abbiamo frutti succosi implementign la seguente interfaccia:delimitata metodo generico di tipo 'super'
public interface Juicy<T> {
Juice<T> squeeze();
}
Utilizzando le variabili di tipo limitati, seguendo il metodo sarebbe TAKS un mucchio di frutti e li spremere tutti:
<T extends Juicy<T>> List<Juice<T>> squeeze(List<T> fruits);
Ora abbiamo bisogno di fratelli minori, come di seguito lavorare troppo:
class Orange extends Fruit implements Juicy<Orange>;
class RedOrange extends Orange;
Così si aspetterebbe il metodo di guardare il seguente:
<T extends Juicy<T>> List<Juice<? super T>> squeeze(List<? extends T> fruits);
Invece trovo la firma del metodo per essere come di seguito:
<**T extends Juicy<? super T>>** List<Juice<? super T>> squeezeSuperExtends(List<? extends T> fruits);
Come si spiega questa differenza?
Non dovrebbe essere 'interfaccia pubblica Juicy>'? (per evitare 'classe Orange estende Fruit implementa Juicy ') –
SLaks
@SLaks: Non è un guadagno enorme, come se 'Apple' implementato' Juicy 'quindi il caso che menzionate non sarebbe stato prevenuto. –
@ MarkPeters: hai ragione; non c'è modo di impedirlo. Tuttavia, impedirebbe 'classe Orange estende Fruit implementa Juicy' –
SLaks