怒城
2016-01-13 13:26
2分30秒向courseToSelect中添加字符串时报错(Exception in thread"main"java.lang.ClassCastException:xxxxx,为什么一定要求add的必须是course类型哇?
我也刚学,也有这个问题,我试了试,觉的“3000sama"同学说得不对,”菜鸟起飞点“说的对但没解释清楚:1、”为什么一定要求add的必须是course类型哇?“ 答:不是一定!里面可以随便添加其他类型,你可以尝试添加
public void testAdd() {
Course cr1 = new Course("1", "数据结构");
coursesToSelect.add(cr1);
Course temp = (Course) coursesToSelect.get(0);
System.out.println("添加了课程" + temp.id + temp.name);
coursesToSelect.add("我是字符串");
System.out.println(coursesToSelect.get(1));
}
不使用foreach循环遍历,而是使用普通打印,你会发现字符串已经被添加而且被打印出来了。老师的课程之所以报错,是因为老师使用的是
foreach(Object obj:soursesToSelect){
Course cr = (Couse)obj;// 报错是出在了这里,是因为存入的String类型”我是字符串“不能被强制转换。并不是不能存,而是已经存进去不能强转罢了。
}
结论是:add里可以添加其他类型。
谢谢大神们啊↖(^ω^)↗
private List<Course> courses; //因为定义了泛型Course,表示List里面只能放Course类型的对象(的引用)
报错的地方为testForEach方法,当我们在遍历时,代码表达的是将集合中的Object类型的元素强转成课程类型的元素(因为我们一直往集合中添加的就是课程类型的元素),所以当你往集合中添加String类的元素,在遍历时会报错。
因为Course本身是个List类型的集合,之前我们操作各种方法的前提是我们定义了一个course类,这个类有序号,也有值,我们在使用这个集合的时候规定了只能采用这种方式来添加(取出、修改等)集合的元素,因此在当前的Course中,它只会识别course类,其他类(例如视频中的String)会报错。
如果你在一开始course类中把它定义成String类型,你就可以add String了,但是我们现在操作的是一个集合,光光String不符合要求,还需要对应的序号。
一点看法,欢迎讨论。
Java入门第三季
409792 学习 · 4340 问题
相似问题