Java Comparator语法有效,但为什么呢?

时间:2015-08-12 19:32:52

标签: 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()的第二个参数。我的比较器PrioritizedPendingListComparatorstatic,因此我不希望使用new

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

1 个答案:

答案 0 :(得分:3)

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);