java - 将两个 ImmutableEnumSet 与 Guava 联合

标签 java guava immutability enumset

我想从 Guava 合并两个 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>

联合是如何正确完成的?

最佳答案

好吧,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));

关于java - 将两个 ImmutableEnumSet 与 Guava 联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33820775/

相关文章:

java - ImmutableSortedMap - 映射中的重复键

c# - 另一个 "Why shouldn' t 结构是可变的?”C#

javascript - 仅使用与先前嵌套键不匹配的新数据更新不可变列表?

javascript - 使用动态键返回不可变状态

java - 使用 hibernate-ResultSet 调用 Oracle 过程 仅返回第一行数据 剩余行数据丢失

java - 如何为 JTable 中的一列添加不同的单元格编辑器?

java - 自动打字机错误

java - 如何使用 guava FluentIterable 来简化 map 转换?

java - Google Guava Cache - cleanUp 和 invalidateAll

java - 类型参数 : "cannot select from parameterized type" 的问题