A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘岩喜 初级黑马   /  2013-1-26 12:21  /  1448 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘岩喜 于 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

4 个回复

正序浏览
黄锦成 发表于 2013-1-26 13:28
有点明白了,我使用javap命令,得到跟他一样的结果。大概是我下载反编译器工具使用反射,将我方法中的参 ...

那就应该是版本的原因了:)再看看有哪位能说的再明白点吧,不完全搞明白很难受啊
回复 使用道具 举报
刘岩喜 发表于 2013-1-26 13:02
就是想知道网上那哥们怎么来的呢,原地址链接是http://www.blogjava.net/fancydeepin/archive/2012/08/25 ...

有点明白了,我使用javap命令,得到跟他一样的结果。大概是我下载反编译器工具使用反射,将我方法中的参数的泛型弄出来了。这个办法在高新技术那里张老师有讲到。
回复 使用道具 举报
黄锦成 发表于 2013-1-26 12:46
我用的是jdk6,反编译结果也跟你一样,带有泛型。“Java中的泛型只存在于编译期”这句话理解起来也没错。
...

就是想知道网上那哥们怎么来的呢,原地址链接是http://www.blogjava.net/fancydeepin/archive/2012/08/25/java_generics.html
回复 使用道具 举报
我用的是jdk6,反编译结果也跟你一样,带有泛型。“Java中的泛型只存在于编译期”这句话理解起来也没错。
我的理解:
在运行java程序时,分为两个时期:
1、编译期:java文件到class文件
2、运行时期:运行class文件

泛型是可以存在于class文件中的。只有在运行时,才会把泛型去掉。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马