谢谢楼上的,这点明白了---------------------------------------- public int compareTo(Object o) 调用时传一个MPair的对象正确运行, 说明((Comparable)key)转型成功, 可是key为Object类型,这样可以吗? 但这里的Comparable是一个接口这个我还是想不通???
to 树根兄 它的key就是普通的Object对象,也没有实现Comparable接口 但竟然没有异常? 我觉得很奇怪Object key, value; return ((Comparable)key).compareTo(((MPair)o).key);
老大们,这么明显的问题怎么都糊涂了。class A implements Comparable{ public int compareTo(Object o){ ... } }A key; String value;MPair mp = new MPair(key, value); 上传发生在MPair的构造函数。
((Comparable)new Object()).compareTo(new Object())
~~~~~Object没有实现Comparable,所以你这么转型会抛异常。
MPair才实现了Comparable,
Object key//key是一个Object对象啊
class Derived extends Base
对于对象obj
若他是Derived,类的对象时才可以转为(Base)obj,或者(Derived)obj
Object key;//
return ((Comparable)key).compareTo(((MPair)o).key);//请看这两句,key明明是一个Object类型的,却强行
转为Comparable,这样也可以运行的,
所以有点想不明了
这样写可以吗?
和
((Comparable)new Object()).compareTo(new Object())
肯定是不一样的
因为在Comparable接口里面的compareTo方法传进去一个Mpair对象肯定是会转成Comparable的,因为Mpair实现了Comparable接口,所以转型没问题
而第二条语句里面往CompareTo里面传一个Object类对象肯定是不行的,因为Object没有实现CompareTo接口,所以强制转换会报错
里面的类型转换是如下实现的
(Comparable)o
说明((Comparable)key)转型成功,
可是key为Object类型,这样可以吗?
但这里的Comparable是一个接口郁闷
我的意思就是说
传进Comparable接口里面的compareTo(Object o)方法的是一个Object
在方法里面这个Object会强制转换成Comparable
如果o(它应该是一个普通的类)实现了Comparable接口那没问题
如果是一个没有实现Comparable接口的类(如楼主的第二个代码里面的new Object()),那就有转型错误
public int compareTo(Object o)
调用时传一个MPair的对象正确运行,
说明((Comparable)key)转型成功,
可是key为Object类型,这样可以吗?
但这里的Comparable是一个接口这个我还是想不通???
key肯定也是实现了Comparable接口的
至于转型,编译器当然不会管你了,因为抛出的是一个ClassCastException显然一般情况下是不应该这么写的。如果要这么写就必须说清楚:key必须是可排序的
也就是实现了Comparable接口的。
它的key就是普通的Object对象,也没有实现Comparable接口
但竟然没有异常?
我觉得很奇怪Object key, value;
return ((Comparable)key).compareTo(((MPair)o).key);
public int compareTo(Object o){
...
}
}A key;
String value;MPair mp = new MPair(key, value);
上传发生在MPair的构造函数。
MPair的构造:MPair(Object k, Object v)如果传给构造的k是一个实现了Comparable,就不会有问题,要是一个没有实现Comparable的对象就出现ClassCastException
---------------------------------------
谢谢 treeroot(根根)在QQ里面帮我解决这个问题,
也谢谢
launch401(宁静温泉)
jFresH_MaN()(AbsolutelyFresh)(java欣人)
和所有的人,