[英]Union two ImmutableEnumSets with Guava
我想從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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.