首页
注册
登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请
登录
V2EX
›
yumeko
›
全部回复第 1 页 / 共 1 页
回复总数
2
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>。
这样可以使用反射来对某一个范型类型的特化类型生成一个具有特化参数实例的安全的范型实例。
关于
·
帮助文档
·
博客
·
API
·
FAQ
·
实用小工具
·
1062 人在线
最高记录 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms ·
UTC 19:51
·
PVG 03:51
·
LAX 11:51
·
JFK 14:51
Developed with
CodeLauncher
♥ Do have faith in what you're doing.