1

我想要构造ImmutableSortedSet。我写了如下代码:

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. 这通常意味着您认为自己正在做一件事,而实际上您正在做另一件事,这就是这种情况。

结果是这段代码不会做你认为的那样......它会丢弃ImmutableSortedSetcreated by 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

查看 GuavaImmutableSortedSet文档后,您似乎确实希望其他重载之一copyOf.

具体来说,您想要copyOf(Comparator, Collection)重载:

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