Java 编程思想中关于泛型存在不理解的地方

2018-05-30 14:10:51 +08:00
 stdying
因为有了擦除,数组的运行时类型就只能是 Object[],如果我们立即将其转型为 T[],在编译期该数组的实际类型就会丢失,而编译器可能会错过某些潜在的错误检查。

为何在编译器会丢失,
使用 Object[] ,是不是就不会丢失,

要理解这部分,还需要那部分知识。

谢谢
2229 次点击
所在节点    Java
3 条回复
qwertty01
2018-05-30 15:07:19 +08:00
书上已经说的很明白了,为了兼容旧代码,所以需要编译器丢失泛型相关的信息。具体在 15.7.2 迁移兼容性

你如果使用 Object[],你就没有啥可以失去(擦除)的了。

看《深入理解 Java 虚拟机》
msg7086
2018-05-31 01:45:30 +08:00
用 Object,已经被擦没了,就没有什么好害怕的了。
究其原因是以前 Java 没有泛型,所以后来的泛型实现为了兼容以前不支持泛型的环境,只能做成伪泛型。
stdying
2018-05-31 10:32:33 +08:00
@qwertty01 好的,谢谢
@msg7086 好的,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/458935

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX