Java 比较器语法可以工作,但为什么呢?

标签 java syntax comparator

我正在使用Java ComparatorSomeClass 的 ArrayList 进行排序项目。它工作得很好,没有问题。我很好奇的是语法。鉴于:

 public static class PrioritizedPendingListComparator implements Comparator<SomeClass> {

        @Override
        public int compare(SomeClass o1, SomeClass o2) {
        ...
        }

然后,过了一段时间,

private ArrayList<SomeClass> pendingList = new ArrayList<>(); 

... // fill it up with entries

Collections.sort(pendingList, new SomeClass.PrioritizedPendingListComparator());

我使用new SomeClass.PrioritizedPendingListComparator()作为 Collections.sort() 的第二个参数。我的比较器,PrioritizedPendingListComparator ,是static所以我不希望必须使用 new .

  1. 为什么我不能只使用 SomeClass.PrioritizedPendingListComparator 例如为什么我需要new
  2. 我如何通过阅读 documentation 知道这一点?

最佳答案

SomeClass.PrioritizedPendingListComparator 是一个类。您需要它的一个实例,因此必须使用 new

当您定义public static class时,static意味着它没有隐式地引用外部类,但您仍然必须以正常方式创建它.

避免 new 的一种方法是使用 enum

public enum PrioritizedPendingListComparator implements Comparator<SomeClass> {
    INSTANCE;

    @Override
    public int compare(SomeClass o1, SomeClass o2) {
    ...
    }

稍后

 Collections.sort(pendingList, SomeClass.PrioritizedPendingListComparator.INSTANCE);

关于Java 比较器语法可以工作,但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31973871/

相关文章:

java - 如何创建具有依赖性的可运行 jar

java - Android:如何使用改造从 json 响应中获取特定字符串?

sql - 删除这些该死的 NULL

java - 使用 lambda 表达式 java 从比较器返回值

c++ - 删除重复项而不四舍五入,C++

java 7 中的 Java 排序(TimSort-MergeSort): Dangerous

JavaFX - 限制 TextArea 行?

java - 理解 Java super() 构造函数

c++ - 在 if 条件中声明变量有什么问题?

bash - 我们什么时候需要用大括号括住 shell 变量?