1

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

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不兼容的类型,但我想要一些可以容纳任何类型的容器。

我认识到在这段代码中无法确定a,bcontents都是同一Enum类型,但是在实际实现中这应该没有问题。

解决我的一般Enum问题的任何想法和可能的方法都是有价值的,我将非常感谢您的帮助。提前致谢。

4

1 回答 1

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);
    }
}
于 2013-01-27T07:45:00.003 回答