Eclipse与Javac:使用泛型的不同编译行为

时间:2011-11-03 19:37:04

标签: java eclipse generics compilation javac

  

可能重复:
  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>

第四行在两个编译器中都能正确编译。

任何人都可以解释发生了什么吗?谢谢:))

0 个答案:

没有答案