現在、ベースクラスとサブクラスの問題に直面しています。
パラメータとして単一のオブジェクト(メソッドsingle)を使用している間、コンパイラは文句を言いません。
しかし、リストに関しては、コンパイラーはリストを次のように宣言するように強制します<? extends Base>
その後、基本タイプのオブジェクトをそのリストに追加することはできなくなりました。
1つのリストで両方のタイプ(ベースとサブクラス)を使用するにはどうすればよいですか?
public class Generics {
class Base { }
class Sub extends Base{ }
interface I {
public void list( List<Sub> list );
public void single( Sub p);
}
class C implements I {
public void list( List<Sub> list) { }
public void single( Sub p) { }
}
void test() {
C c = new C();
c.single( new Sub() );
c.list( new ArrayList<Base>() ); // The method list(List<Generics.Sub>) in the type Generics.C is not applicable for the arguments (ArrayList<Generics.Base>)
}
public static void main( String[] args) {
Generics g = new Generics();
g.test();
}
}