为了账号安全,请及时绑定邮箱和手机立即绑定

不明白为什么添加的一定要是course类型

2分30秒向courseToSelect中添加字符串时报错(Exception in thread"main"java.lang.ClassCastException:xxxxx,为什么一定要求add的必须是course类型哇?

正在回答

6 回答

我也刚学,也有这个问题,我试了试,觉的“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里可以添加其他类型。

4 回复 有任何疑惑可以回复我~

谢谢大神们啊↖(^ω^)↗

0 回复 有任何疑惑可以回复我~
private List<Course> courses;
//因为定义了泛型Course,表示List里面只能放Course类型的对象(的引用)


2 回复 有任何疑惑可以回复我~

报错的地方为testForEach方法,当我们在遍历时,代码表达的是将集合中的Object类型的元素强转成课程类型的元素(因为我们一直往集合中添加的就是课程类型的元素),所以当你往集合中添加String类的元素,在遍历时会报错。

1 回复 有任何疑惑可以回复我~
#1

Nesive

可以通过add()方法网集合中添加任何类型的元素。 用get()方法取得的值为Object类型 ,foreach中 用 把Object类型强制转换为Course类型为什么还会报错?
2016-03-31 回复 有任何疑惑可以回复我~

因为Course本身是个List类型的集合,之前我们操作各种方法的前提是我们定义了一个course类,这个类有序号,也有值,我们在使用这个集合的时候规定了只能采用这种方式来添加(取出、修改等)集合的元素,因此在当前的Course中,它只会识别course类,其他类(例如视频中的String)会报错。

如果你在一开始course类中把它定义成String类型,你就可以add String了,但是我们现在操作的是一个集合,光光String不符合要求,还需要对应的序号。


一点看法,欢迎讨论。

1 回复 有任何疑惑可以回复我~
#1

怒放的生命012

你说错了Course只是集合的一个元素而不是一个集合
2016-06-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

不明白为什么添加的一定要是course类型

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信