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

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

为什么Java不允许我们

private T[] elements = new T[initialCapacity];

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

原因是什么?


红颜莎娜
浏览 691回答 3
3回答

素胚勾勒不出你

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

泛舟湖上清波郎朗

如果不能提供一个像样的解决方案,你最终只会得到一些更糟糕的IMHO。常见的工作如下。T[] ts = new T[n];被替换为(假设T扩展对象而不是另一个类)T[] ts = (T[]) new Object[n];我更喜欢第一个例子,但是更多的学术类型似乎更喜欢第二个例子,或者只是不愿意去想它。关于为什么不能仅仅使用对象[]的大多数例子都同样适用于List或Collection(它们是受支持的),所以我认为它们是非常糟糕的参数。注意:这是集合库本身没有在没有警告的情况下编译的原因之一。如果您无法在没有警告的情况下支持此用例,则泛型模型IMHO从根本上破坏了一些东西。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java