内部でジェネリックを使用するコードがいくつかあります。パブリック API を介して機能が公開されるまでは、これまでのところすべて問題ありません。この問題は、次のおもちゃの例と同じです:特定のサブタイプ (この例では)List
のラップされたアイテムがあります。T extends Number
this を返したいときにList
、現在 を返しているため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;
}
}