我想构造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")
的情况下删除此警告?感谢。
答案 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);