在JAVA中,声明一个List集合,往集合里添加A类型元素与B类型元素,再创建这个集合的Itera
答案:5 悬赏:0 手机版
解决时间 2021-03-19 20:20
- 提问者网友:饥饿走向夜
- 2021-03-19 11:28
在JAVA中,声明一个List集合,往集合里添加A类型元素与B类型元素,再创建这个集合的Itera
最佳答案
- 五星知识达人网友:煞尾
- 2021-03-19 12:01
注意看你代码里面对对象的操作,始终都只有一个 toString(),而这是每个类继承Object之后都有的,没有用到任何有关类型的信息,所以运行的时候根本不会发生类型强转,一个多态就完了。
你也可以再next()后面加上getClass()试一下。追问那为什么迭代器泛型为String类型时会报错
在吗?追答编译器优化不了了追问给搞的有点乱了System.out.println (对象);与System.out.println (对象.toString());有什么区别?
为啥System.out.println (it.next())能输出;System.out.println (it.next.toString());却输出不了?追答这个跟编译器的优化机制有关,如果只有next,对象取出来是Object,不转型,自动调用toString,如果你写了以后,编译器就不进行优化这个结论可以通过反编译的字节码文件来证明,优化算法没研究过,你感兴趣可以看看jdk源码,应该都是C++写的追问我这里在创建迭代器it的时候声明了泛型Account,it.next()不是应该返回一个Account类型吗?为啥还是返回一个Object?你的意思是编译器为了优化,如果只是调用.next()方法,那么不论泛型声明为什么都返回Object型,只有对.next()进行其它方法操作时才会将类型强制转换为所声明的泛型吗?追答嗯,对的
你也可以再next()后面加上getClass()试一下。追问那为什么迭代器泛型为String类型时会报错
在吗?追答编译器优化不了了追问给搞的有点乱了System.out.println (对象);与System.out.println (对象.toString());有什么区别?
为啥System.out.println (it.next())能输出;System.out.println (it.next.toString());却输出不了?追答这个跟编译器的优化机制有关,如果只有next,对象取出来是Object,不转型,自动调用toString,如果你写了以后,编译器就不进行优化这个结论可以通过反编译的字节码文件来证明,优化算法没研究过,你感兴趣可以看看jdk源码,应该都是C++写的追问我这里在创建迭代器it的时候声明了泛型Account,it.next()不是应该返回一个Account类型吗?为啥还是返回一个Object?你的意思是编译器为了优化,如果只是调用.next()方法,那么不论泛型声明为什么都返回Object型,只有对.next()进行其它方法操作时才会将类型强制转换为所声明的泛型吗?追答嗯,对的
全部回答
- 1楼网友:深街酒徒
- 2021-03-19 14:21
抛异常呗。。。。。。追问没抛啊追答Account怎么定义的呢?追问?怎么回事?追答那不是一回事吗?都是String类型。
- 2楼网友:不甚了了
- 2021-03-19 14:15
你又没加泛型 是什么出来还是什么追问没加具体类型,List 的get ()方法返回的是Object类型吧。而迭代器我声明了返回为Account类型,用next ()返回的一定要为Account类型吧。追答类型转换呀追问String怎么可以转换为Account类型
- 3楼网友:西岸风
- 2021-03-19 13:25
不规定泛型追问然后呢?追答对象.getClass(); 可以获取对象的数据类型追问你回答的和我问的有关系吗?😔追答你获取对象的数据类型 不就是知道了是A类型还是B类型了吗。这不就能够区别对待了吗。遇到A类型就做1操作,遇到B类型就做2操作。
- 4楼网友:轻熟杀无赦
- 2021-03-19 13:01
用Object接啊 顶多不能转换成A 然后做相应的操作追问为什么没报错?String与StringBuffer如何转为Account?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯