通用枚举/ EnumSet故障

时间:2013-01-27 07:11:07

标签: java generics enums enumset

我有一个类和函数定义如下:

public class Site {
    public EnumSet<?> contents;

    public void determineStates(Site a, Site b) {
        this.contents.clear();
        this.contents.addAll(a.contents);
        this.contents.addAll(b.contents);
        a.contents.removeAll(b.contents);
        this.contents.removeAll(a.contents);
    }
}

对于这两个addAll操作,Eclipse都给出了以下错误消息:

The method addAll(Collection<? extends capture#6-of ?>) in the type AbstractCollection<capture#6-of ?> is not applicable for the arguments (EnumSet<capture#7-of ?>)

基本上我需要某种形式的Enum泛型,我对看似有限的东西感到沮丧。我有许多Enum类型不兼容,但我希望有一些容器可以容纳任何类型。

我认识到在此代码中无法确定abcontents是否都属于Enum类型,但实际上实施这不应该是有问题的。

解决我的通用Enum问题的任何想法和可能的方法都很有价值,我非常感谢你的帮助。提前谢谢。

1 个答案:

答案 0 :(得分:4)

Site类应该是通用的:

public class Site<E extends Enum<E>> {
    public EnumSet<E> contents;

    public void determineStates(Site<E> a, Site<E> b) {
        this.contents.clear();
        this.contents.addAll(a.contents);
        this.contents.addAll(b.contents);
        a.contents.removeAll(b.contents);
        this.contents.removeAll(a.contents);
    }
}