0

我在下面有这段代码:

public static <E> Set<E> union(Set<E> set1, Set<E> set2) {
    Set<E> resultSet = new HashSet<>(set1);
    resultSet.addAll(set2);
    return resultSet;
}

我想重载一种方法,如下所示,并获得绑定不匹配:

 public static <E> Set<E> union(EnumSet<E extends Enum<E>> set1, EnumSet<E extends Enum<E>> set2){
    Set<E> resultSet = set1.clone();
    resultSet.addAll(set2);
    return resultSet;
}

我改到下面,它不起作用。

为什么?我该怎么办?

4

1 回答 1

2

该类EnumSet声明如下

public abstract class EnumSet<E extends Enum<E>> extends ... implements ... { ... }

在这里您可以看到类型变量E被限制为Enum<E>. 因此,您必须以相同的方式约束静态方法的类型变量:

public static <E extends Enum<E>> Set<E> union(EnumSet<E> set1, EnumSet<E> set2) {
    Set<E> resultSet = set1.clone();
    resultSet.addAll(set2);
    return resultSet;
}
于 2014-10-15T08:16:15.420 回答