<?extends A>不接受A的子类

Una*_*bal 10 java android extends arraylist

我正在使用Android Studio,我一直遇到一个我不知道如何解决的问题.我不知道这是Android Studio的问题,是Java还是错误.

我有一个类,其构造函数如下:

public MakeQuery(Callable<ArrayList<? extends A>) {
     ...
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下行创建该类的对象:

Callable<ArrayList<B>> callable = new Callable<ArrayList<B>>() {...};
MakeQuery makeQuery = new MakeQuery(callable);
Run Code Online (Sandbox Code Playgroud)

(当然,课程B延伸A.双重检查)

但是当我调用构造函数时,IDE会告诉我它需要另一种类型的参数.

我犯了什么错误?感谢您的帮助!:)

Lou*_*man 11

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

造成这种情况的原因很复杂,但是您编写的代码只有在您完全 传入时才会起作用Callable<ArrayList<? extends A>>.

规则是即使B延伸A,Foo<B>也不延伸Foo<A>.但它确实延伸了Foo<? extends A>.

因此,应用该规则两次:

  1. List<B>不延伸List<A>,但它延伸List<? extends A>.
  2. Callable<List<B>>不延伸Callable<List<? extends A>>,但它延伸Callable<? extends List<? extends A>>.