我有一个名为submit
的方法:
<T> Future<Optional<T>> submit(Value<T> value) {
//...
}
以及对该方法的调用。
Value<?> value = null;
Future<Optional<?>> future = submit(value);
但是,只有当我将签名更改为
Future<? extends Optional<?>> future
时,它才会编译,因为submit
返回Future<Optional<caputure of ?>>
,而不是Future<Optional<?>>
,因为泛型是不变的。是否有一种方法可以向编译器提供提示并调用submit
方法,使其返回Future<Optional<?>>
?
这段代码片段:
<T, E extends Future<Optional<T>>> E submit(Value<T> value) {
// ...
}
Value<?> value = null;
Future<Optional<?>> future = submit(value);
编译可以通过,但是在返回值之前我需要进行不安全的类型转换为E。
这里有一个解释泛型逆变性的答案,但它仍然没有回答如何处理捕获类型的问题。
future.get()
将返回一个Optional<?>
对象。 - biziclop