今天编译这段代码时我很惊讶:
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 的引用),但无论如何它不会导致编译器错误并且它运行“正常”(至少提供的打印方法)。据我了解,编译器使用 object 作为类型参数,但我发现它违反直觉。为什么编译器会做这样的事情?为什么不需要我指定类型参数?