繁体   English   中英

Java - 是否可以子类化数组?关于Java中的数组的更多问题

[英]Java - Is it possible to subclass an array? And more questions about arrays in Java

这些问题纯粹是出于好奇而被问到的。 我实际上并不需要子类化数组,我只是想弄清楚它们如何在Java中工作。

  1. 阵列的Javadoc API在哪里? 我找到了一个'Arrays'类,但该类只包含在Java数组上使用的实用程序,而不是实际的数组类。 这引出了我的下一个问题:

  2. 是否有一个实际的数组类,其中所有数组都是子类?

  3. Object[]的类的超类String[]例如)? 我猜这里的答案是否定的。 这些实际的课程和其他课程一样吗?

  4. String[]是一个与String[][]不同的类吗? 还是String[][][]等?

  5. 正如标题中所要求的那样,是否有可能对数组类进行子类化(或者对数组类进行子类化?仍然不确定它是如何工作的,因为你可以通过上面的问题来判断)? 我可以创建自己的类,其实例与数组完全相同,除非它们具有更多功能吗?

谢谢。

Java语言规范回答了所有这些问题:

数组类型的直接超类是Object。 每个数组类型都实现了Cloneable和java.io.Serializable接口。

所以不,所有数组都没有通用的基类,因此也没有JavaDoc。 数组的成员由规范定义

数组类型之间的子类型在4.10.3节中定义 - 是的, String[]Object[]的子类型。 另请参见ArrayStoreException

是的, String[].class != String[][].class (参见第10.8节

不,没有语法来子类化数组。 特别是,extends子句必须包含类类型(并且数组类型不是类类型)。

Java中没有数组类。

有趣的是, 数组是对象 (但不是类实例):

对象是类实例或数组。

更多信息: http//docs.oracle.com/javase/specs/jls/se7/html/jls-10.html

实现java.util.List的类提供了更像面向数组的结构的面向对象的实现。

您不能子类化数组。 即使与它们一起使用的语法有点不同,它们也是对象(使用JLS检查)。 它们没有太多的API - 除了Object之外( toString()没有做你期望的,使用Arrays.deepToString() ; equals()hashCode()是相似的)有length字段。 此外,阵列是可复制的。 如果目标元素类型是源元素类型的超类型,则只能转换数组类型 - 您可以将String[]Object[]但不能反过来。 如果您确定数组中的对象是特定类型,则可以单独转换每个元素。 String[][]是一个数组String[]所以它是一个不同的类型String[]作为其元素是串的阵列,而不是字符串。 您可以创建为数组提供类似功能的类( ArrayList就是这样),但它们不能与常规数组互换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM