黑马程序员技术交流社区
标题:
能否见一个String存入到泛型是Integer的List集合中?
[打印本页]
作者:
shi0000
时间:
2014-4-19 22:21
标题:
能否见一个String存入到泛型是Integer的List集合中?
能否见一个String存入到泛型是Integer的List集合中?
使用hashcode存入的话能否取出来呢?
作者:
anqi
时间:
2014-4-19 22:29
本帖最后由 anqi 于 2014-4-19 23:17 编辑
不能 java最新的策略时候编译时期不报错,那么运行时期不报错。早期的java设计不严谨,会出现这种类型转换异常。而泛型的加入就是为了避免这种异常。
虽然在运行时,泛型是不存在的,即List<Integer>类 实际的运行是List类,即不存在泛型类。(泛型大多只在编译时期)
但它在编译时期就检查你加入的元素是不是Integer类型,防止你运行的时候抛出异常。也就是你想添加String类型的,直接编译不通过。
早期的java设计不严谨如
int[] arr={1,3}
Number brr= arr;
brr[1]=4.5;
上面的两个引用型变量数组指向同一片内存空间,往里添加编译的正常,运行的时候会抛出异常。
泛型是1.5加入的,就是为了防止集合出现这种情况。
额看楼下说了反射 ,貌似还真行,自己从来没往这上面想过。
作者:
织语不如书
时间:
2014-4-19 22:48
可以啊 通过反射就能做到
后面那个问题没看明白
作者:
龙健
时间:
2014-4-20 15:47
直接向泛型为Integer的List集合中是不能加入String类型的,这就要涉及到程序的生命周期,在javac时候,程序会检查List只能接收Integer类型的参数,但是该类被编译成为字节码之后,就会忽略点Integer对象,也就是说在这个时候它什么类型的数据都能接收到,然而要获得一个类的字节码,我们可以通过使用反射的方法得到,此时由于对该类所接收的数据没有什么限制,所以此时就能接收到任意类型的数据,当然也包括String了。对于你说使用hashcode是否能取出来,不知道你的原意是什么,我的理解是你想要问是否可以将String存入hashcode中,并从中取出该String,答案是能,只要在存入过后你不修改参数hashcode算法的元素,那么完全是可以取出的,如果你修改了参与hashcode算法的元素,那你的数据存储的位置就会发生变化,故你不能取到存入的String值,不知道理解对不对
作者:
shi0000
时间:
2014-4-20 16:22
龙健 发表于 2014-4-20 15:47
直接向泛型为Integer的List集合中是不能加入String类型的,这就要涉及到程序的生命周期,在javac时候,程序 ...
嗯,了解了
作者:
の放下执著
时间:
2014-4-20 21:07
本帖最后由 の放下执著 于 2014-4-20 21:09 编辑
可以!可以通过反射,先获取字节码,再获取字节码中的add方法,然后放进去。
泛型是给编译器看的,反射可以透过编译器。使用hashcode存入的话能否取出来呢?
哥们,我理解不了这句话,嘿嘿。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2