import java.util.HashSet; import java.util.Set; public class Main { public static void main(String[] args) { Set setOfInts = new HashSet(); Set setOfObjects = covariantSet(setOfInts); } public static Set covariantSet(Set set) { return new HashSet(set); } }
javac中的编译返回:
Main.java:10: incompatible types found : java.util.Set required: java.util.Set Set setOfObjects = covariantSet(setOfInts); ^
public static Set covariantSet(Set set, Class returnType)
现在返回类型在运行时传递给方法,编译器不应该抱怨。
在你的Maven构建skript中,你已经设置了编译器版本。
在Ant中,它看起来像这样:
搜索1.3或1.4,或编译以在maven skripts中找到该值
值为1.5时,编译器将接受generics(请参阅错误消息)
我知道这是一个老问题,但我想提一下,该函数可以写成:
import java.util.HashSet; import java.util.Set; public class Main { public static void main(String[] args) { Set setOfInts = new HashSet(); Set setOfObjects = covariantSet(setOfInts); } public static Set covariantSet(Set extends S> set) { return new HashSet(set); } }