我使用Java Comparator对SomeClass
项的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
。
SomeClass.PrioritizedPendingListComparator
例如为什么我需要new
? 答案 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);