有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaEclipse与Javac:泛型的不同编译行为

Possible Duplicate:
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;
}

第一行将生成以下编译错误:

Type mismatch: cannot convert from Class<String> to 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) 个答案