有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java构造不带警告的ImmutableSortedSet

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

但它会产生警告:

The static method orderedBy(Comparator) from the type ImmutableSortedSet should be accessed in a static way

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


共 (2) 个答案

  1. # 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. # 2 楼答案

    在查看番石榴ImmutableSortedSet文档之后,似乎您实际上希望其他重载之一copyOf

    具体来说,您需要^{}重载:

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