Ecco un esempio di codice su cui sto lavorando:Java Generics - tipo di ritorno atteso diverso da quello attuale
public interface FooMaker<T extends Enum<T> & FooType>
{
public List<Foo<T>> getFoos(String bar);
}
di più scontato ci saranno molte implementazioni concrete diverse di FooMaker Let. Così ho scritto un codice per utilizzare i FooMakers.
FooMaker<?> maker = Foos.getRandomMaker();
List<Foo<?>> fooList = maker.getFoos("bar"); //error here!
La seconda riga di codice causa il problema, eclissi mi dice che il codice dovrebbe essere:
FooMaker<?> maker = Foos.getRandomMaker();
List<?> fooList = maker.getFoos("bar");
Sto avendo difficoltà a capire il motivo per cui la dichiarazione Foo come il tipo parametrico in lista deve andare via per rendere corretto il tipo di ritorno.
Qualche idea?
Che farò 'T estende Enum & FooType' essere? T deve essere un enum ed estendere FooType, ma non puoi estendere un enum! –
Con i generici, la parola chiave "extends" viene utilizzata per descrivere le interfacce implementate. FooType è anche un'interfaccia e useresti ancora la parola chiave extends. – Nick