可能重复:
Generics compiles and runs in Eclipse, but doesn't compile in javac
Compilers behave differently with a null parameter of a generic method
public static void main(String[] args) {
Class<Object> type1 = String.class;
Class<? extends Object> type2 = String.class;
Class<Object> type3 = get(String.class);
Class<Object> type4 = Foo.<Object, String> get(String.class);
}
public static <I, C extends I> Class<I> get(Class<C> type) {
return null;
}
第一行将生成以下编译错误:
类型不匹配:无法从
Class<String>
转换为Class<Object>
这很正常。第二行将正常工作。
在eclipse和javac中编译时,第三行的工作方式不同。 Eclipse会愉快地编译。 Javac会给我以下错误:
[ERROR] Foo.java:[36,26] incompatible types
[ERROR] found : java.lang.Class<java.lang.String>
[ERROR] required: java.lang.Class<java.lang.Object>
第四行在两个编译器中都能正确编译。
任何人都可以解释发生了什么吗?谢谢:))