このコードがコンパイルされない理由を理解しようとしています。
インターフェイスAがインターフェイスBによって拡張されています。インターフェイスBを実装するクラスCです。
タイプAの単一のオブジェクトを受け取るメソッドを呼び出すと、タイプCのオブジェクトを渡すことができます。これで問題ありません。
タイプAのjava.util.Listを受け取るメソッドを呼び出すと、タイプCのオブジェクトのjava.util.Listを渡すことができません。Eclipseは次のエラーを生成します。タイプTest1のメソッドaddAList(List)引数には適用されません(リスト)
ソースコードの例を以下に示します。
import java.util.ArrayList;
import java.util.List;
public class Test1 {
public void addASingle(A a) {
return;
}
public void addAList(List<A> aList) {
return;
}
// **********************************
public static void main(String[] args) {
Test1 t = new Test1();
C c1 = new C();
List<C> cList = new ArrayList<C>();
cList.add(c1);
t.addASingle(c1); // allowed
t.addAList(cList); // The method addAList(List<Test1.A>)
// in the type Test1 is not applicable for the arguments (List<Test1.C>)
}
// **********************************
public static interface A {
}
public static interface B extends A {
}
public static class C implements B {
}
}