为什么可以将int []作为通用类型参数,但不能将int作为常规类型参数? [关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么可以将int []作为通用类型参数,但不能将int作为常规类型参数? [关闭]相关的知识,希望对你有一定的参考价值。

我注意到我们可以创建类型参数为int[]但不能为int的泛型。

我发现泛型T的Type参数G<T>应该是Object类的子级。

因为基本类型不是Object类的子类,所以它们不能用作泛型的参数类型。

但是那我几乎没有疑问:

  1. 然后我们如何使用原始数组?
  2. 原始/引用类型的数组是否扩展了对象类?
  3. 我们可以扩展它们并创建自定义数组类吗?
  4. 或者数组是不能用作普通类的特殊类型的类吗?
  5. 还有其他特殊的类,如数组。(如果对此的回答很广泛,则忽略这一类)​​

我环顾四周,发现数组实际上是扩展对象的类。(我们使用new关键字创建数组)

但是我找不到其他问题的答案。

答案

原始类型的数组确实是一个对象。这样的数组可以在任何可以使用对象的地方使用。数组具有公共length属性,该属性返回数组的长度。

无法扩展数组,但是对于任何类型的T,都存在一个T[]。数组多少有些特殊,是的。

另一个特殊类是Enum类。

另一答案

java中有两类类型:基本类型和引用(即对象)

array类型(无论是原始数组还是对象数组)始终是引用类型。数组类型的变量包含对object的引用。

基本数组仍然是Object,例如,int[]Object的子类型。您可以在Objectint[]中调用任何方法。

泛型可以容纳任何不是基本类型的东西。数组不是原始类型,因此允许使用Collection<int[]>。请参阅:https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html

以上是关于为什么可以将int []作为通用类型参数,但不能将int作为常规类型参数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将信号参数作为 int 而不是字符串发出?

为啥我们不能将字符串作为模板参数传递?

Java中的通用方法-如何将参数类类型作为返回类型返回[重复]

默认泛型可作为参数正常使用,但不能作为函数参数的返回类型使用

将实例化的 System.Type 作为通用方法的类型参数传递

为啥我不能将常量数组作为参数传递?