3

我想联合两个ImmutableEnumSets番石榴。这是我的尝试:

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 回答