使用迭代器时出现了错误:不兼容的类型:Object无法转换为Employee。求大神点播为什么? 迭代器iteratorjavaobjectjdk 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 代码的第132行:Employee ee = it.next();出现了问题报错的,报错的内容是:不兼容的类型:Object无法转换为Employee 需要强制类型转换(Employee)it.next() 我知道需要强制装换,但是为什么需要强制转换呢?使用it.next()不是可以得到它真正的类型吗?为什么说是Object,我在上面用了泛型啊 我找了一下API文档,文档对于这个函数是这样描写的:Iterator<E> iterator()Returns an iterator over the elements in this collection.前面不是带了一个E吗? 1.首先Iterator里面的元素,初始肯定是Object类型的(不然你怎么往里面放对象进去?),正因为所有类都继承Object,它才可以安全的被放在"Iterator里面",没有什么特殊操作的话,里面的类型不会变吧~第二,如果因为你填充类Employee的几个实例(包括子类实例)进去,按照你的意思,假如它自动帮你在内部已经转型好了,那么假如还有个Employee的父类的实例要放进去,那么这里除非投放进去时弄向下转型,否则不能放进去吧~第三,初学的话,不要钻的那么深,这种精神是好,但是等你把面扩大点,工作后再来玩这些更合适.目前的话,多熟悉api吧,能够熟练运用即可,如果要玩深点的话,这问题涉及到java的设计了吧(我的认为),默认返回Object类型,一定意义上是为了确保安全.相对的,把注意力弄到代码上,比如下面的一些mistakes稍微改进了点东西,比如每次循环你就别再new一个ee了,让他重新指向新对象即可for循环在这里,while更合适,因为for的三个表达式貌似没有充分用到,Iterator一般用这样的形式.Iterator it = al.iterator(); Employee ee = null; while(it.hasNext()) { ee = (Employee) it.next(); if (ee instanceof SalariedEmployee) { overtimeCost += SalariedEmployee.overtimeSalary; } else if (ee instanceof BasePlusSalesEmployee) { overtimeCost += BasePlusSalesEmployee.overtimeSalary; } } 有道理,确实每次都创建了一个新的引用变量ee影响效率。不能内部转换好的话,那我觉得这个版本的Java对“类型推断”处理的还不是很好啊,上数学课《形式化方法》使用COQ直接可以类型推断。记得有个科学家就是证明了类型推断拿了诺贝尔奖。谢谢你,精辟的回复!! 这个时间轴滚动的效果怎么实现? 杭电hdu 2133 求一个月中的某一天是星期几问题? 关于多态,望高手解惑 怎么备份还原数据库 Calendar的字段问题 修炼JAVA 关于java中打包的讨论 哪位知道和ERP相关的SAT和ABAT是什么意思?现场给分 連結 Mysql 失敗 HashSet问题 重写了hashcode和equals方法为什么还能存的进去 Properties中数组越界了? java调用方法选择机制
出现了问题报错的,报错的内容是:
不兼容的类型:Object无法转换为Employee
(Employee)it.next()
我找了一下API文档,文档对于这个函数是这样描写的:
Iterator<E> iterator()
Returns an iterator over the elements in this collection.前面不是带了一个E吗?
第三,初学的话,不要钻的那么深,这种精神是好,但是等你把面扩大点,工作后再来玩这些更合适.目前的话,多熟悉api吧,能够熟练运用即可,如果要玩深点的话,这问题涉及到java的设计了吧(我的认为),默认返回Object类型,一定意义上是为了确保安全.
相对的,把注意力弄到代码上,比如下面的一些mistakes
稍微改进了点东西,比如每次循环你就别再new一个ee了,让他重新指向新对象即可
for循环在这里,while更合适,因为for的三个表达式貌似没有充分用到,Iterator一般用这样的形式.
Iterator it = al.iterator();
Employee ee = null;
while(it.hasNext())
{
ee = (Employee) it.next(); if (ee instanceof SalariedEmployee)
{
overtimeCost += SalariedEmployee.overtimeSalary;
} else if (ee instanceof BasePlusSalesEmployee)
{
overtimeCost += BasePlusSalesEmployee.overtimeSalary;
}
}