Java でスーパータイプ ジェネリックをテストしてきましたが、障害が発生しました。これは私がテストしていたサンプルコードです:
import java.util.*;
class GenericTests {
public static void main( String[] args ) {
List<B> list3 = new ArrayList<B>();
testMethod( list3 );
}
public static void testMethod( List<? super B> list ) {
list.add( new A() );
list.add( new B() );
}
}
class A { }
class B extends A { }
コンパイルすると、エラーは次のようになります。
GenericTests.java:20: error: no suitable method found for add(A)
list.add( new A() );
^
method List.add(int,CAP#1) is not applicable
(actual and formal argument lists differ in length)
method List.add(CAP#1) is not applicable
(actual argument A cannot be converted to CAP#1 by method invocation conve
rsion)
where CAP#1 is a fresh type-variable:
CAP#1 extends Object super: B from capture of ? super B
1 error
B の下限を考えると、任意のスーパータイプを追加できると思いましたか? それとも、スーパータイプを許可すると型チェックが中断されるため、これは参照 (つまり、メソッド シグネチャ内の引数) にのみ適用されますか?