<? extends A> 不会接受 A 的 child 类

<? extends A> won't accept A's child classes

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

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

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

我尝试使用以下行创建 class 的 object:

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

(当然,class B 扩展了 A。仔细检查)

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

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

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

这样做的原因很复杂,但是您编写的代码只有在您 完全 Callable<ArrayList<? extends A>> 传入时才有效。

规则是即使B延伸AFoo<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>>