在调用时会一个MPair的对象不会出错是传入一个MPair的对象不会出错

解决方案 »

  1.   

    这个例子会保证key已经实现了Comparable。
    ((Comparable)new Object()).compareTo(new Object()) 
                   ~~~~~Object没有实现Comparable,所以你这么转型会抛异常。
      

  2.   

    class MPair implements Map.Entry, Comparable//
    MPair才实现了Comparable,
    Object key//key是一个Object对象啊
      

  3.   

    class Base
    class Derived extends Base
    对于对象obj
    若他是Derived,类的对象时才可以转为(Base)obj,或者(Derived)obj
      

  4.   

    TO:楼上
    Object key;//
    return ((Comparable)key).compareTo(((MPair)o).key);//请看这两句,key明明是一个Object类型的,却强行
    转为Comparable,这样也可以运行的,
    所以有点想不明了
      

  5.   

    return ((Comparable)key).compareTo(((MPair)o).key);
    这样写可以吗?
      

  6.   

    这个程序只是整个例子的一部分,作者在client代码中加入的key都是实现了comparable接口的实体,所以这么写没有问题。
      

  7.   

    ((Comparable)key).compareTo(((MPair)o).key);

    ((Comparable)new Object()).compareTo(new Object()) 
    肯定是不一样的
    因为在Comparable接口里面的compareTo方法传进去一个Mpair对象肯定是会转成Comparable的,因为Mpair实现了Comparable接口,所以转型没问题
    而第二条语句里面往CompareTo里面传一个Object类对象肯定是不行的,因为Object没有实现CompareTo接口,所以强制转换会报错
      

  8.   

    Comparable接口里面的compareTo(Object o)
    里面的类型转换是如下实现的
      (Comparable)o
      

  9.   

    public int compareTo(Object o)调用时传一个MPair的对象正确运行,
    说明((Comparable)key)转型成功,
    可是key为Object类型,这样可以吗?
    但这里的Comparable是一个接口郁闷
      

  10.   

    上面有笔误,不好意思
    我的意思就是说
    传进Comparable接口里面的compareTo(Object o)方法的是一个Object
    在方法里面这个Object会强制转换成Comparable
    如果o(它应该是一个普通的类)实现了Comparable接口那没问题
    如果是一个没有实现Comparable接口的类(如楼主的第二个代码里面的new Object()),那就有转型错误
      

  11.   

    谢谢楼上的,这点明白了----------------------------------------
    public int compareTo(Object o)
    调用时传一个MPair的对象正确运行,
    说明((Comparable)key)转型成功,
    可是key为Object类型,这样可以吗?
    但这里的Comparable是一个接口这个我还是想不通???
      

  12.   

    接口也可以有对象呀,呵呵
    key肯定也是实现了Comparable接口的
      

  13.   

    可这里的key是Object类型啊,
      

  14.   

    只要key实现了Comparable接口就没问题呀
    至于转型,编译器当然不会管你了,因为抛出的是一个ClassCastException显然一般情况下是不应该这么写的。如果要这么写就必须说清楚:key必须是可排序的
    也就是实现了Comparable接口的。
      

  15.   

    to 树根兄
    它的key就是普通的Object对象,也没有实现Comparable接口
    但竟然没有异常?
    我觉得很奇怪Object key, value;
    return ((Comparable)key).compareTo(((MPair)o).key);
      

  16.   

    老大们,这么明显的问题怎么都糊涂了。class A implements Comparable{
    public int compareTo(Object o){
    ...
    }
    }A key;
    String value;MPair mp = new MPair(key, value);
    上传发生在MPair的构造函数。
      

  17.   

    哈哈,明白了
    MPair的构造:MPair(Object k, Object v)如果传给构造的k是一个实现了Comparable,就不会有问题,要是一个没有实现Comparable的对象就出现ClassCastException
    ---------------------------------------
    谢谢 treeroot(根根)在QQ里面帮我解决这个问题,
    也谢谢  
    launch401(宁静温泉)
    jFresH_MaN()(AbsolutelyFresh)(java欣人)
    和所有的人,