【问题标题】:Construct ImmutableSortedSet without warnings在没有警告的情况下构造 ImmutableSortedSet
【发布时间】:2011-05-23 14:03:01
【问题描述】:

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

但它会产生警告:

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

如果没有@SuppressWarnings("static-access"),我如何才能删除此警告?谢谢。

【问题讨论】:

  • 哎呀!有谁知道,javac 和 eclipse 都给出警告吗? (请说是。)
  • @Kevin Bourrillion,日食。但我的 javac 没有。

标签: java guava construction


【解决方案1】:

它给你这个警告是因为orderedBy 是一个静态方法,你在ImmutableSortedSet 的实例上调用它。这通常意味着您认为自己在做一件事,而实际上您正在做另一件事,这就是这种情况。

结果是这段代码不会像你想象的那样做......它将丢弃由copyOf(obj)创建的ImmutableSortedSet(它仅用于访问静态方法orderedBy ,可以直接使用)并返回一个空集,就好像你刚刚调用了ImmutableSortedSet.orderedBy(myComparator).build()

这就是你想做的事情(正如 R. Bemrose 所说):

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

为了后人,这是我最初仓促发布的内容(结果相同):

ImmutableSortedSet<String> ordered = ImmutableSortedSet.orderedBy(myComparator)
    .addAll(obj).build();

【讨论】:

    【解决方案2】:

    查看 Guava ImmutableSortedSet 文档后,您似乎确实希望将其他重载之一设置为 copyOf

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

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

    【讨论】:

    • 谢谢。我会照你说的做。但我保证会接受@ColinD 的回答(
    • 你是对的,这个方法是作者想要做的,虽然最终结果是一样的。
    猜你喜欢
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多