java android arraylist extends

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:

  1. List<B> no extiende la List<A> , pero extiende la List<? extends A> List<? extends A> .
  2. Callable<List<B>> Callable<List<? extends A>> no se extiende Callable<List<? extends A>> Callable<List<? extends A>> , pero se extiende Callable<? extends List<? extends A>> Callable<? extends List<? extends A>> Callable<? extends List<? extends A>> .