<? 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
延伸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>>
。
我正在使用 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
延伸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>>
。