在没有警告的情况下构造ImmutableSortedSet

时间:2010-12-10 16:07:29

标签: java guava construction

我想构造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();

但会产生警告:

  

静态方法   orderedBy(比较者)来自   类型ImmutableSortedSet应该   以静态方式访问

如何在没有@SuppressWarnings("static-access")的情况下删除此警告?感谢。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:3)

在查看Guava ImmutableSortedSet文档后,您似乎确实需要copyOf的其他重载之一。

具体来说,您希望copyOf(Comparator, Collection)重载:

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