当前位置: 技术问答>java相关
这个Exception怎么扑足不到呀?
来源: 互联网 发布时间:2015-10-01
本文导语: Object[] myarray={"hao","jin","abc",new Integer(3), new Double(3.0),null}; Collection c2=Arrays.asList(myarray); TreeSet set2=new TreeSet(c2); Iterator it=set2.iterator();// print((Object)set2)无法打印输出,该用反复...
Object[] myarray={"hao","jin","abc",new Integer(3),
new Double(3.0),null};
Collection c2=Arrays.asList(myarray);
TreeSet set2=new TreeSet(c2);
Iterator it=set2.iterator();// print((Object)set2)无法打印输出,该用反复器
try{
while(it.hasNext())
System.out.print((Object)it.next()+" ");
}
catch(Exception e){print("ClassCastException");}
我定义了一个方法
public static void print(Object o){
System.out.println(o);
}
调试结果:
Exception in thread "main" java.lang.ClassCastException: java.lang.String
at java.lang.Integer.compareTo(Integer.java:913)
at java.util.TreeMap.compare(TreeMap.java:1081)
at java.util.TreeMap.put(TreeMap.java:459)
at java.util.TreeSet.add(TreeSet.java:205)
at java.util.AbstractCollection.addAll(AbstractCollection.java:315)
at java.util.TreeSet.addAll(TreeSet.java:251)
at java.util.TreeSet.(TreeSet.java:138)
at TreeSetTest.main(TreeSetTest.java:44)
不知道问题到底出在哪,高手请教?谢谢
|
问题在这一行
TreeSet set2=new TreeSet(c2);
TreeSet是有序的集合
其中的元素必须可以比较,也就是说要实现java.util.Comparator接口
而你集合中的元素
Object[] myarray={"hao","jin","abc",new Integer(3),
new Double(3.0),null};
字符串是可比较的Integer,Double也可以比较
但TreeSet企图将null转变为java.util.Comparator时就会出错
TreeSet set2=new TreeSet(c2);
TreeSet是有序的集合
其中的元素必须可以比较,也就是说要实现java.util.Comparator接口
而你集合中的元素
Object[] myarray={"hao","jin","abc",new Integer(3),
new Double(3.0),null};
字符串是可比较的Integer,Double也可以比较
但TreeSet企图将null转变为java.util.Comparator时就会出错