私はJavaでジェネリックを学んでいて、非常に興味深いコードに近づきました。Javaでは、あるタイプのリストを別のタイプに追加することは違法であることを知っています。
List<Integer> integerList = new ArrayList<Integer>();
List<String> stringList=integerList;
そのため、2 行目でコンパイル時エラーが発生します。
しかし、このようにクラス内にジェネリック メソッドを作成すると、
class GenericClass <E>{
void genericFunction(List<String> stringList) {
stringList.add("foo");
}
// some other code
}
メインクラスでは、整数のリストを使用してメソッドを呼び出しますが、エラーは発生しません。
public class Main {
public static void main(String args[]) {
GenericClass genericClass=new GenericClass();
List<Integer> integerList= new ArrayList<Integer>();
integerList.add(100);
genericClass.genericFunction(integerList);
System.out.println(integerList.get(0));
System.out.println(integerList.get(1));
}
}
出力
100
foo
エラーが発生しないのはなぜですか?