我正在使用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
? - 我如何通过阅读 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/