如何知道两个物体是否相互可比?

时间:2014-11-28 19:33:46

标签: java comparable

我想编写通用比较器,它可以比较任何类的对象。我希望数字首先是字符串,然后是字符串,然后是所有其他可比较的对象。

首先我写了

@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可以是任何类,但实际上它可能应该是实现它的同一个类......

那么,如何完成?

1 个答案:

答案 0 :(得分:0)

假设将来某个时候你会创建一些Apple类实例和一些类Orange实例。您今天编写的通用比较算法怎么可能在未来将这些Apple实例与Orange实例进行比较?我认为您需要重新考虑您要完成的任务,并且在尝试比较它们之前可能确保您的对象属于同一类。