簡體   English   中英

用番石榴聯合兩個ImmutableEnumSets

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM