1

構築したいImmutableSortedSet。私は次のようなコードsmtを書きました:

Set<String> obj = new HashSet<String>();
Comparator<String> myComparator = new Comparator<String>(){
    @Override
    public int compare(String o1, String o2) {
        return 0;
    }           
};
Set<String> ordered = ImmutableSortedSet.copyOf(obj)
    .orderedBy(myComparator).build();

しかし、それは警告を生成します:

タイプImmutableSortedSetの静的メソッドorderedBy(Comparator)には、静的な方法でアクセスする必要があります

どうすればこの警告を削除でき@SuppressWarnings("static-access")ますか?ありがとう。

4

2 に答える 2

4

orderedByは静的メソッドであり、のインスタンスで呼び出しているため、その警告が表示されますImmutableSortedSet。これは、実際には別のことをしているのに、あることをしていると思っていることを意味することがよくあります。

その結果、このコードはあなたが思っていることを実行しません...それはImmutableSortedSetによって作成されたものを破棄し(直接使用できるcopyOf(obj)静的メソッドにアクセスするためにのみ使用されています)、空のセットを返しますorderedByを呼び出したかのようにImmutableSortedSet.orderedBy(myComparator).build()

これがあなたがしたいことです(R. Bemroseが言ったように):

ImmutableSortedSet<String> ordered = ImmutableSortedSet.copyOf(myComparator, obj);

後世のために、最初に急いで投稿したものを次に示します(結果は同じです)。

ImmutableSortedSet<String> ordered = ImmutableSortedSet.orderedBy(myComparator)
    .addAll(obj).build();
于 2010-12-10T16:12:58.497 に答える
3

GuavaのImmutableSortedSetドキュメントを見ると、実際には他のオーバーロードの1つが必要なようcopyOfです。

copyOf(Comparator, Collection)具体的には、オーバーロードが必要です。

Set<String> ordered = ImmutableSortedSet.copyOf(myComparator, obj);
于 2010-12-10T16:17:04.687 に答える