请注意,Double 和 Integer 不仅扩展了 Number,还实现了 Comparable。因此编译器猜测的返回类型将是 Set<Number&Comparable>,它不能转换为 Set<Number>。您需要告诉编译器要使用哪种跟随类型。使用后续代码,您不需要确切的类型。
interface X {}
class U implements X {}
class V implements X {}
public static void main(String[] args) {
Set<U> integers = new HashSet<U>();
Set<V> doubles = new HashSet<V>();
Set<X> numbers = union(integers, doubles);
}
public static <E> Set<E> union(Set<? extends E> s1, Set<? extends E> s2) {
return null;
}
但是如果你稍微改变一下,你会得到原点错误。
interface X {}
interface Y {}
class U implements X, Y {}
class V implements X, Y {}
public static void main(String[] args) {
Set<U> integers = new HashSet<U>();
Set<V> doubles = new HashSet<V>();
Set<X> numbers = union(integers, doubles);
}
public static <E> Set<E> union(Set<? extends E> s1, Set<? extends E> s2) {
return null;
}