将两个ImmutableEnumSet与Guava合并 [英] Union two ImmutableEnumSets with Guava
问题描述
我想从番石榴中合并两个 ImmutableEnumSets
.这是我的尝试:
I want to union two ImmutableEnumSets
from Guava.
Here's my try on it:
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
字段未编译,失败,显示
The field ourColorSet
does not compile, it fails with
Type mismatch: cannot convert from Sets.SetView<OurColors.Colors> to
ImmutableSet<OurColors.Colors>
工会如何正确完成?
推荐答案
好吧, Sets.union
返回一个 Sets.SetView< E>
,而不是一个ImmutableSet< E>
.因此,您可以执行以下操作:
Well, Sets.union
returns a Sets.SetView<E>
, not an ImmutableSet<E>
. So you can do this:
public final static Sets.SetView<Colors> ourColorSet =
Sets.union(myColorSet, yourColorSet);
...在很多情况下都可以,或者使用 Set
代替:
... which in many cases would be fine, or use Set
instead:
public final static Set<Colors> ourColorSet =
Sets.union(myColorSet, yourColorSet);
这仍然是无法修改的,只是没有 ImmutableSet< E>
的编译时类型.如果确实需要,可以使用 immutableCopy()
:
That's still going to be unmodifiable, it just doesn't have the compile-time type of being ImmutableSet<E>
. If you really, really need that, you can use immutableCopy()
:
public final static ImmutableSet<Colors> ourColorSet =
Sets.union(myColorSet, yourColorSet).immutableCopy();
...或创建另一个枚举感知集:
... or to create another enum-aware set:
public final static ImmutableSet<Colors> ourColorSet =
Sets.immutableEnumSet(Sets.union(myColorSet, yourColorSet));
这篇关于将两个ImmutableEnumSet与Guava合并的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!