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 typesfound : 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