次の設定を扱っているとします。
A extends B
メインは:
public void doIt() {
List<A> listOfA = new ArrayList<A>();
listOfA.add(new A());
listOfA.add(new A());
C c = new C();
// We know that really, listOfA is going to be modified
// in some way and will be returned to us, thus, it is
// ok to cast result back to what we know it to be
List<A> a = (List<A>) c.doSomethingWithListOfA(listOfA);
}
C
メソッドがある場合
public List<? extends B> doSomethingWithListOfA(List<? extends B>
listOfObjectsThatExtendB) {
return someFormofListA;
}
(List) のキャスト c.doSomethingWithListOfA(listOfA); - Type safety: Unchecked cast from List<capture#1-of ? extends B> to List<A>
警告が返ってきます。
他のクラスも B を拡張する可能性があるため、実際には A のリストなのか、B を拡張する X なのかコンパイラが不明になる可能性があるのではないでしょうか?
警告を抑制する以外に、どうすればこれを確認できますか? (未チェックのキャスト)