Aquí está un ejemplo de un código que estoy trabajando:Java Generics - Esperado tipo de retorno diferente a la real
public interface FooMaker<T extends Enum<T> & FooType>
{
public List<Foo<T>> getFoos(String bar);
}
de Supóngase además habrá muchas diferentes implementaciones concretas de FooMaker Let. Así que escribí un código para utilizar los FooMakers.
FooMaker<?> maker = Foos.getRandomMaker();
List<Foo<?>> fooList = maker.getFoos("bar"); //error here!
La segunda línea de código hace que el tema, eclipse me dice que el código debe ser:
FooMaker<?> maker = Foos.getRandomMaker();
List<?> fooList = maker.getFoos("bar");
estoy teniendo problemas para entender por qué la declaración de Foo como el tipo parametrizado en la lista tiene que ir de distancia para hacer que el tipo de devolución sea correcto.
¿Alguna idea?
¿Qué 'T extiende Enum & FooType' ser? T tiene que ser una enumeración y extender FooType, ¡pero no se puede extender una enumeración! –
Con genéricos, la palabra clave "extends" se usa para describir las interfaces implementadas. FooType también es una interfaz y aún usaría la palabra clave extends. – Nick