我在使用 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>
.
所以应用该规则两次:
-
List<B>
不扩展List<A>
, 但它扩展了List<? extends A>
. -
Callable<List<B>>
不扩展Callable<List<? extends A>>
, 但它扩展了Callable<? extends List<? extends A>>
.
关于java - <? extends A> 不会接受 A 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31123850/