今日、このコードがコンパイルされたとき、私は驚きました:
class GenericClass<T> {
public void emptyMethod(T instance) {
// ..
}
public void print(T instance) {
System.out.println(instance);
}
}
public class Main {
public static void main(String[] args) {
GenericClass first = new GenericClass();
System.out.println("Wow");
first.emptyMethod(10);
first.print(16);
}
}
コンパイラは警告を発します (タイプ セーフティ: メソッド emptyMethod(Object) は生の型 GenericList に属します。ジェネリック型 GenericList への参照はパラメータ化する必要があります) が、コンパイラ エラーは発生せず、「正常に」実行されます (少なくとも指定された印刷方法)。私が理解しているように、コンパイラはオブジェクトを型引数として使用していますが、直感に反していると思います。なぜコンパイラはそのようなことをするのでしょうか? 型パラメーターを指定する必要がないのはなぜですか?