【发布时间】:2015-01-27 11:37:18
【问题描述】:
我想写一个通用比较器,它可以比较任何类的对象。我希望先出现数字,然后是字符串,然后是所有其他可比较的对象。
我先写了
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public int compare(Object o1, Object o2) {
if( o1 instanceof Number && !(o2 instanceof Number) ) {
return -1;
}
else if( o2 instanceof Number && !(o1 instanceof Number) ) {
return +1;
}
else if( o1 instanceof String && !(o2 instanceof String) ) {
return -1;
}
else if( o2 instanceof String && !(o1 instanceof String) ) {
return +1;
}
else if( o1 instanceof Comparable && !(o2 instanceof Comparable) ) {
return -1;
}
else if( o2 instanceof Comparable && !(o1 instanceof Comparable) ) {
return +1;
}
else if( o1 instanceof Comparable && o2 instanceof Comparable ) {
return ((Comparable)o1).compareTo(o2);
}
else {
return o1.hashCode() - o2.hashCode();
}
}
我在想支票
o1 instanceof Comparable && o2 instanceof Comparable
会给我比较数字、字符串和所有其他可比较的类。
但后来我发现Number 是不可比较的,即我不能用它来比较双精度数和整数。
我还发现,Comparable<T> 合同是模糊的。虽然T 可以是任何类,但实际上它可能应该是实现它的同一个类...
那么,如何实现呢?
【问题讨论】:
-
我想写通用比较器 你总会遇到一些你没有正确处理或根本没有处理的情况。它会给你带来更多的麻烦,而不是解决问题。
-
没有正确的方法可以做到这一点,因为这实际上是不可能的。
-
那么标题问题的答案是什么?
标签: java comparable