将类型参数添加到 EnumSet 总是给我"Bound mismatch"



我有下面的代码:

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;
}

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

为什么?我该怎么办?

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;
}

相关内容

  • 没有找到相关文章

最新更新