黑马程序员技术交流社区
标题: 关于泛型的类型擦除问题 [打印本页]
作者: 刘岩喜 时间: 2013-1-26 12:21
标题: 关于泛型的类型擦除问题
本帖最后由 刘岩喜 于 2013-1-27 11:01 编辑
public class Test {
public void method(List<String> list){
}
}
经反编译是下面的结果
但是根据网上有人总结的知识:
Java中的泛型只存在于编译期,在将 Java 源文件编译完成 Java 字节代码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。
结果是下面这样的,而且有图为证啊
问题会不会是因为我用的是jdk 1.7?麻烦大家有用其他版本的试一下,谢谢啦
补充一下:我看的资料链接地址:
http://www.blogjava.net/fancydeepin/archive/2012/08/25/java_generics.html
作者: 黄锦成 时间: 2013-1-26 12:46
我用的是jdk6,反编译结果也跟你一样,带有泛型。“Java中的泛型只存在于编译期”这句话理解起来也没错。
我的理解:
在运行java程序时,分为两个时期:
1、编译期:java文件到class文件
2、运行时期:运行class文件
泛型是可以存在于class文件中的。只有在运行时,才会把泛型去掉。
作者: 刘岩喜 时间: 2013-1-26 13:02
黄锦成 发表于 2013-1-26 12:46
我用的是jdk6,反编译结果也跟你一样,带有泛型。“Java中的泛型只存在于编译期”这句话理解起来也没错。
...
就是想知道网上那哥们怎么来的呢,原地址链接是http://www.blogjava.net/fancydeepin/archive/2012/08/25/java_generics.html
作者: 黄锦成 时间: 2013-1-26 13:28
刘岩喜 发表于 2013-1-26 13:02
就是想知道网上那哥们怎么来的呢,原地址链接是http://www.blogjava.net/fancydeepin/archive/2012/08/25 ...
有点明白了,我使用javap命令,得到跟他一样的结果。大概是我下载反编译器工具使用反射,将我方法中的参数的泛型弄出来了。这个办法在高新技术那里张老师有讲到。
作者: 刘岩喜 时间: 2013-1-26 19:11
黄锦成 发表于 2013-1-26 13:28
有点明白了,我使用javap命令,得到跟他一样的结果。大概是我下载反编译器工具使用反射,将我方法中的参 ...
那就应该是版本的原因了:)再看看有哪位能说的再明白点吧,不完全搞明白很难受啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |