我有一些在内部使用泛型的代码。到目前为止一切都很好,直到通过公共 API 公开功能。该问题与以下玩具示例相同:我有一个List
具有特定子类型的包装项目(T extends Number
在此示例中)。当我想返回 thisList
时,我目前正在返回 a List<Wrapper<? extends Number>>
,这使得客户端代码非常冗长。
是否有可能将返回类型更改为List<Wrapper<Number>>
?客户不需要知道 Wrappers 包含任何特定类型的 Number。我尝试了几种强制转换方法,但它们都因编译错误而失败。
public static List<Wrapper<? extends Number>> getNumbers() {
Wrapper<Integer> number1 = new Wrapper<Integer>(1);
Wrapper<Double> number2 = new Wrapper<Double>(2.);
List<Wrapper<? extends Number>> numbers = new ArrayList<Wrapper<? extends Number>>();
numbers.add(number1);
numbers.add(number2);
return numbers;
}
class Wrapper<T extends Number> {
private final T item;
Wrapper(T item) {
this.item = item;
}
T getItem() {
return item;
}
}