为什么Java不允许扩展数组类型

时间:2014-07-23 14:44:16

标签: java arrays inheritance syntax

作为一项实验,我试图像这样扩展int - 数组:

public class IntArrayExtension extends int[]{
 // additional fields and methods.
}

在类本身中添加一些与排序,交换,子数组构建等相关的方法。但是我在编译时遇到了这个错误:

IntArrayExtension.java:1: unexpected type
found   : int[]
required: class
public class IntArrayExtension extends int[]{
                                          ^
1 error

我很想知道:为什么Java不允许扩展数组?

2 个答案:

答案 0 :(得分:10)

扩展基本类型(如String或数组)会打开安全漏洞。如果Java允许您扩展数组,那么采用数组的方法就会变得不安全。这就是为什么字符串是final,而数组根本无法扩展。

例如,您可以覆盖clone()方法,并返回不正确大小的数组。这有可能打破以数组为参数的系统代码逻辑。

最重要的是,数组是Java中的特殊对象,因为它们没有类定义。

您尝试解决的问题有两种解决方案:

  • 您可以使用静态方法将逻辑放入辅助类中,类似于Collections等,或者
  • 您可以在IntArrayExtension类中封装数组,并提供用于访问数组及其附加功能的包装方法。

答案 1 :(得分:4)

数组是对象,但数组类型不是类,因此无法扩展。请参阅示例JLS #10.8