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このコードでは、 、b、およびcontentsがすべて同じ型であることを確認する方法がないことは認識していますが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 に答える