为了账号安全,请及时绑定邮箱和手机立即绑定

我不能在Java中创建泛型数组类型的原因是什么?

我不能在Java中创建泛型数组类型的原因是什么?

红颜莎娜 2019-06-15 18:43:43
我不能在Java中创建泛型数组类型的原因是什么?为什么Java不允许我们private T[] elements = new T[initialCapacity];我可以理解.NET不允许我们这样做,就像在.NET中,在运行时可以有不同大小的值类型,但是在Java中,所有类型的T都将是对象引用,因此具有相同的大小(如果我错了,请纠正我)。原因是什么?
查看完整描述

3 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

这是因为Java的数组(与泛型不同)在运行时包含有关其组件类型的信息。因此,在创建数组时必须知道组件类型。因为你不知道T在运行时,不能创建数组。


查看完整回答
反对 回复 2019-06-15
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

如果不能提供一个像样的解决方案,你最终只会得到一些更糟糕的IMHO。

常见的工作如下。

T[] ts = new T[n];

被替换为(假设T扩展对象而不是另一个类)

T[] ts = (T[]) new Object[n];

我更喜欢第一个例子,但是更多的学术类型似乎更喜欢第二个例子,或者只是不愿意去想它。

关于为什么不能仅仅使用对象[]的大多数例子都同样适用于List或Collection(它们是受支持的),所以我认为它们是非常糟糕的参数。

注意:这是集合库本身没有在没有警告的情况下编译的原因之一。如果您无法在没有警告的情况下支持此用例,则泛型模型IMHO从根本上破坏了一些东西。


查看完整回答
反对 回复 2019-06-15
  • 3 回答
  • 0 关注
  • 690 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信