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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 那日苏   /  2011-7-16 23:05  /  2749 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在Google泛型时,在某帖中看到:
Java 语言中的泛型基本上完全在编译器中实现,由编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种实现技术称为 擦除(erasure)(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除)。那么运行时如何区分 List<String>和 List<Integer>?

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 我很赞同

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-7-17 01:25:40
沙发
在编译的时候就进行判断了,也就是说,编译出来的字节码文件其实是不同的,已经包含了类型方面的区别了。字节码文件都不同,运行时当然能区分出了阿,2个不同的文件嘛。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-17 10:07:48
藤椅
你所运用的开发工具是一行一行编译的,也就是说当你完成List<String>时,和完成List<Integer>时,工具会一行行编译,不会考虑下面的代码,所以编译出来的文件也是不一样的,张老师说当你遇到不会的问题时候,就编一个简单的程序运行一下,就知道了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 11:11:35
板凳
JAVA的泛型只在其编译的时候有用,在编译成class文件的时候就被擦除了。
JAVA源代码在编译之后会类型擦除。所以在运行的时候没有泛型这一说。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 11:14:39
报纸
行时应该不能区分 List<String>和 List<Integer>(运行时都是 List)

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马