首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法在Java中创建通用数组类型的原因是什么?

无法在Java中创建通用数组类型的原因是什么?
EN

Stack Overflow用户
提问于 2018-10-09 00:21:22
回答 2查看 0关注 0票数 0

Java不允许我们这样做的原因是什么

代码语言:javascript
复制
private T[] elements = new T[initialCapacity];

我可以理解.NET不允许我们这样做,因为在.NET中你有值类型,在运行时可以有不同的大小,但在Java中,所有类型的T将是对象引用,因此具有相同的大小(如我错了请纠正我)。是什么原因?

EN

回答 2

Stack Overflow用户

发布于 2018-10-09 08:25:00

引用:

不允许使用泛型类型的数组,因为它们不是声音。问题是由于Java数组的交互,这些数组不是静态声音,而是动态检查的,使用泛型,这些泛型是静态的,不是动态检查的。以下是你如何利用这个漏洞: class Box<T> { final T x; Box(T x) { this.x = x; } } class Loophole { public static void main(String[] args) { Box<String>[] bsa = new Box<String>[3]; Object[] oa = bsa; oa[0] = new Box<Integer>(3); // error not caught by array store check String s = bsa[0].x; // BOOM! } } 曾提议使用被Tiger拒绝的静态安全阵列(又名Variance)来解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2018-10-09 09:22:28

这是不可能的原因是Java纯粹在编译器级别上实现其泛型,并且每个类只生成一个类文件。在运行时,编译的类需要使用相同的字节码处理它的所有用法。所以,new T[capacity]完全不知道需要实例化什么类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档