<? Extends A> не будет принимать дочерние классы A

Я работаю с Android Studio, и у меня проблема, я не знаю, как ее решить. Я не знаю, является ли проблема с Android Studio, с Java или ошибкой make.

У меня есть класс, конструктор которого следующий:

public MakeQuery(Callable<ArrayList<? extends A>) { ... } 

Я пытаюсь создать объект этого класса со следующими строками:

 Callable<ArrayList<B>> callable = new Callable<ArrayList<B>>() {...}; MakeQuery makeQuery = new MakeQuery(callable); 

(Разумеется, класс B расширяет A Двойной проверяется)

Но когда я вызываю конструктор, IDE сообщает мне, что он ожидает другого типа аргумента.

Какую ошибку я делаю? Спасибо за помощь! 🙂

Solutions Collecting From Web of "<? Extends A> не будет принимать дочерние классы A"

Write Callable<? extends ArrayList<? extends A>> Callable<? extends ArrayList<? extends A>> Callable<? extends ArrayList<? extends A>> .

Причины этого сложны, но код, который вы написали, будет работать только в том случае, если вы передадите именно Callable<ArrayList<? extends A>> Callable<ArrayList<? extends A>> .

Правило состоит в том, что даже если B продолжит A , Foo<B> не расширяет Foo<A> . Однако он расширяет Foo<? extends A> Foo<? extends A> .

Поэтому примените это правило дважды:

  1. List<B> не расширяет List<A> , но расширяет List<? extends A> List<? extends A> .
  2. Callable<List<B>> не Callable<List<? extends A>> Callable<? extends List<? extends A>> Callable<List<? extends A>> , но он расширяет Callable<? extends List<? extends A>> Callable<? extends List<? extends A>> Callable<? extends List<? extends A>> .