java - <? extiende A> no aceptará clases de niños A
android arraylist (1)
Estoy trabajando con Android Studio y sigo teniendo un problema que no sé cómo resolver. No sé si es un problema con Android Studio, con Java o un error una marca.
Tengo una clase cuyo constructor es el siguiente:
public MakeQuery(Callable<ArrayList<? extends A>) {
...
}
Intento crear un objeto de esa clase con las siguientes líneas:
Callable<ArrayList<B>> callable = new Callable<ArrayList<B>>() {...};
MakeQuery makeQuery = new MakeQuery(callable);
(Por supuesto, la clase B extiende A Doble marcada)
Pero cuando llamo al constructor, el IDE me dice que espera otro tipo de argumento.
¿Qué error estoy cometiendo? ¡Gracias por toda la ayuda! :)
Escribir Callable<? extends ArrayList<? extends A>> Callable<? extends ArrayList<? extends A>> Callable<? extends ArrayList<? extends A>> .
Las razones para esto son complicadas, pero el código que escribió solo funcionará si Callable<ArrayList<? extends A>> exactamente Callable<ArrayList<? extends A>> Callable<ArrayList<? extends A>> .
La regla es que incluso si B extiende A , Foo<B> no extiende Foo<A> . Sin embargo, extiende Foo<? extends A> Foo<? extends A> .
Entonces aplica esa regla dos veces:
-
List<B>no extiende laList<A>, pero extiende laList<? extends A>List<? extends A>. -
Callable<List<B>>Callable<List<? extends A>>no se extiendeCallable<List<? extends A>>Callable<List<? extends A>>, pero se extiendeCallable<? extends List<? extends A>>Callable<? extends List<? extends A>>Callable<? extends List<? extends A>>.