3

ImmutableEnumSetsGuava から2 つを結合したい。これが私の試みです:

public final class OurColors {

    public enum Colors {
        RED,
        GREEN,
        BLUE,
        YELLOW,
        PINK,
        BLACK
    }

    public final static ImmutableSet<Colors> myColorSet =
            Sets.immutableEnumSet(Colors.BLUE,
                                  Colors.GREEN);

    public final static ImmutableSet<Colors> yourColorSet =
            Sets.immutableEnumSet(Colors.YELLOW,
                                  Colors.PINK);

    public final static ImmutableSet<Colors> ourColorSet =
            Sets.union(myColorSet, ourColorSet);
}

フィールドourColorSetはコンパイルされず、失敗します

Type mismatch: cannot convert from Sets.SetView<OurColors.Colors> to
ImmutableSet<OurColors.Colors>

組合はどのように正しく行われますか?

4

1 に答える 1

8

ではなく、 をSets.union返します。だからあなたはこれを行うことができます:Sets.SetView<E>ImmutableSet<E>

public final static Sets.SetView<Colors> ourColorSet =
        Sets.union(myColorSet, yourColorSet);

...多くの場合、これで問題ないか、Set代わりに次を使用します。

public final static Set<Colors> ourColorSet =
        Sets.union(myColorSet, yourColorSet);

それはまだ変更できません。コンパイル時の型がありませんImmutableSet<E>。本当に、本当にそれが必要な場合は、次を使用できますimmutableCopy()

public final static ImmutableSet<Colors> ourColorSet =
        Sets.union(myColorSet, yourColorSet).immutableCopy();

... または別の列挙型認識セットを作成するには:

public final static ImmutableSet<Colors> ourColorSet =
        Sets.immutableEnumSet(Sets.union(myColorSet, yourColorSet));
于 2015-11-20T07:16:38.153 に答える