首页
注册
登录
yumeko 最近的时间轴更新
yumeko
V2EX 第 205138 号会员,加入于 2016-12-09 11:56:41 +08:00
yumeko
提问
技术话题
好玩
工作信息
交易信息
城市相关
yumeko 最近回复了
2020-08-02 05:03:28 +08:00
回复了
szzhiyang
创建的主题
›
程序员
›
如何在其他编程语言中用上 Go 的 defer 语句?
如何在其他编程语言中用上 Go 的 if err != nil....
2019-09-11 16:57:07 +08:00
回复了
amiwrong123
创建的主题
›
程序员
›
Java 泛型擦除与补偿的迷惑
Java 的类型检查包括静态的和动态的检查。
静态检查由 Java 编译器进行。动态检查由 Java 虚拟机进行。
动态检查可以防止错误的 type cast 造成程序产生 undefined behavior。
当然动态检查的结果是,错误的 type cast 会让程序产生 Error 而退出执行。
范型虽然会擦除类型,但是如果代码里没有 type cast,那么执行就是安全的。
T 是一个类型参数,你不能用一个类型参数来产生类型实例。
类型参数只是给编译器确定代码里一个范型类的具体类型是什么。
所以范型类内部无法使用 T 来确定需要构造什么类型。
但是 Java Byte Code 在具体的范型类实现上又会保存类型信息,并且可以通过反射 API 获取。
例如说 static List<String> getList() {...} 的函数签名返回类型是 java.util.List<java.lang.Object>,
但是范型信息会保存 java.util.List<java.lang.String>。
这样可以使用反射来对某一个范型类型的特化类型生成一个具有特化参数实例的安全的范型实例。
»
yumeko 创建的更多回复
关于
·
帮助文档
·
博客
·
API
·
FAQ
·
实用小工具
·
3015 人在线
最高记录 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 16ms ·
UTC 13:30
·
PVG 21:30
·
LAX 05:30
·
JFK 08:30
Developed with
CodeLauncher
♥ Do have faith in what you're doing.