java - <? extends A> 不会接受 A 的子类

标签 java android arraylist extends

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

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

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

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

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

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

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

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

最佳答案

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>> .

关于java - <? extends A> 不会接受 A 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31123850/

相关文章:

java - 如何显示插件版本

java - 为什么 gzip 压缩缓冲区大小大于未压缩缓冲区?

java - Spring 安全 : 404 on logout

android - TextView 中的项目符号点被截断

Java:KeyListener 不工作

java - Volley : No authentication challenges found

Android 应用程序模板?

java - 将整数列表从 Java 传递到 Oracle 函数

java - JavaFX 空数组列表

java - 在 Android 中通过 onCreate 使用 onSaveInstanceState 检索数据