当前位置:  开发笔记 > 编程语言 > 正文

如何比较两个对象而不知道它们的类型

如何解决《如何比较两个对象而不知道它们的类型》经验,为你挑选了1个好方法。

我正在实现一个排序列表类,在这个类中我要对任何类型的对象进行排序,所以现在我想测试该对象是否具有可比性,

我使用此代码覆盖compareTo()方法: -

class MyObject implements Comparable {

Object ob;

    MyObject(){
        this.ob=new Object();
    }

    public int compareTo(Object current){
        if((ob.toString().compareTo(current.toString()))>1)
        return 1;
        else if((ob.toString().compareTo(current.toString()))<1)
        return -1;
        else
        return 0;

    }

    public String toString(){

        return (String)ob;
    }
}

所以现在我需要像这样为这些对象分配数字

class SortedListTest{
    public static void main (String arg[]){

        MyObject b1= new MyObject();
        MyObject b2= new MyObject();

        b1.ob=6;
        b2.ob=3;

        System.out.println(b2.compareTo(b1));
    }

}

但它一直给我这个例外: -

线程"main"java.lang.ClassCastException中的异常:java.lang.Integer无法强制转换为java.lang.String

GhostCat say.. 6

从概念上讲,这根本没有意义!

关键是:当您在列表中允许任意类型的对象时,"排序"这一概念在这里没有任何意义.

因此简短的回答是:忘记它.

从技术上讲,你的问题在这里:

return (String)ob;

该代码假定 obj是一个String.但是,当你允许任何类型的对象时,这不一定是真的.所以obj.toString()会阻止运行时问题,但是; 如上所述:解决技术问题不是真正的答案.

让我们回到现实世界的例子:假设你被要求对桌子上的东西进行分类:勺子,刀子,杯子,香蕉,苹果.你打算怎么做?

如果有的话,你可以收回所有共同点的东西; 比如"重量".所以你把所有东西放在一个尺度上; 并用它来"排序"它们.

从Java的角度来看,对象唯一的共同点是String表示(当调用toString()它们时)或数值(调用时hashCode()).因此,您可以对这些属性进行"排序".哪个会起作用,但不会导致任何远程有用的东西.

换句话说:当您打算对列表的内容进行排序时,除了只允许列表中的"相同类型的对象"之外别无他法.这就是为什么java集合正是以这种方式工作的原因.在某种意义上:使用泛型来表达List包含具有某种常见类型的对象.从概念的角度来看,这仅仅意味着:不允许任何东西进入特定列表,而只允许"具有共同点"的对象.



1> GhostCat say..:

从概念上讲,这根本没有意义!

关键是:当您在列表中允许任意类型的对象时,"排序"这一概念在这里没有任何意义.

因此简短的回答是:忘记它.

从技术上讲,你的问题在这里:

return (String)ob;

该代码假定 obj是一个String.但是,当你允许任何类型的对象时,这不一定是真的.所以obj.toString()会阻止运行时问题,但是; 如上所述:解决技术问题不是真正的答案.

让我们回到现实世界的例子:假设你被要求对桌子上的东西进行分类:勺子,刀子,杯子,香蕉,苹果.你打算怎么做?

如果有的话,你可以收回所有共同点的东西; 比如"重量".所以你把所有东西放在一个尺度上; 并用它来"排序"它们.

从Java的角度来看,对象唯一的共同点是String表示(当调用toString()它们时)或数值(调用时hashCode()).因此,您可以对这些属性进行"排序".哪个会起作用,但不会导致任何远程有用的东西.

换句话说:当您打算对列表的内容进行排序时,除了只允许列表中的"相同类型的对象"之外别无他法.这就是为什么java集合正是以这种方式工作的原因.在某种意义上:使用泛型来表达List包含具有某种常见类型的对象.从概念的角度来看,这仅仅意味着:不允许任何东西进入特定列表,而只允许"具有共同点"的对象.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有