Java泛型可在Eclipse中编译,但不能在javac中编译

我不得不发现我的项目中有Java代码,该代码可以在Eclipse中编译并正常运行,但是会在javac中引发编译错误。

一个完整的代码段:

import java.util.HashSet;

import java.util.Set;

public class Main {

public static void main(String[] args) {

Set<Integer> setOfInts = new HashSet<Integer>();

Set<Object> setOfObjects = covariantSet(setOfInts);

}

public static <S, T extends S> Set<S> covariantSet(Set<T> set) {

return new HashSet<S>(set);

}

}

javac中的编译返回:

Main.java:10: incompatible types

found : java.util.Set<java.lang.Integer>

required: java.util.Set<java.lang.Object>

Set<Object> setOfObjects = covariantSet(setOfInts);

^

现在,此错误阻止在Maven中构建项目。由于Eclipse编译器具有更高的容忍度,因此我现在不得不假设代码段的定义和用法如上所述,静态方法不是有效的Java吗?

回答:

似乎Sun的1.6 JDK无法推断正确的类型。以下内容似乎可以在我的机器上运行:

Set<Object> setOfObjects = Main.<Object, Integer>covariantSet(setOfInts);

请注意,您必须调用以类名为前缀的静态方法

以上是 Java泛型可在Eclipse中编译,但不能在javac中编译 的全部内容, 来源链接: utcz.com/qa/405241.html

回到顶部