pes*_*kal 4 java collections comparable classcastexception comparator
我使用我之前声明的Comparator在ArrayList上调用Collections.sort().
ArrayList<Employee> list = new ArrayList<Employee>();
Comparator<Employee> comparator = new Comparator<Employee>() {
public int compare(Employee o1, Employee o2) {
return o1.getName().toLowerCase().compareTo(o2.getName().toLowerCase());
}
};
...
Collections.sort(list, comparator);
Run Code Online (Sandbox Code Playgroud)
出于某种原因,sort尝试将我的ArrayList的元素转换为Comparables,即使我传递了Comparator.为什么会发生这种情况?
如果它有用,这是我的堆栈跟踪
Exception in thread "Thread-3" java.lang.ClassCastException: processing.app.EmployeeManager$PrettyOkayEmpolyee cannot be cast to java.lang.Comparable
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at foobar.Main.doSomeSorting(Main.java:140)
...
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
在Comparator你通过可能是 null.
Javadoc说:
@param
c比较器确定列表的顺序.甲null值表示元素的自然顺序应该被使用.
所以它会假设参数Comparable是否Comparator是null.代码Arrays.sort与此一致.我认为这真的应该抛出一个NPE如果Comparator是null,但它的方法的合同的一部分,因此不能被改变.
| 归档时间: |
|
| 查看次数: |
3135 次 |
| 最近记录: |