【问题标题】:Cannot add int[] type to an ArrayList无法将 int[] 类型添加到 ArrayList
【发布时间】:2013-08-10 23:47:53
【问题描述】:

我正在尝试将整数数组添加到 ArrayList 中,如下所示,这不起作用:

ArrayList<int[]> myAL = new ArrayList<int[]>();

myAL.add({2,3});

但是,通过引用添加它:

ArrayList<int[]> myAL = new ArrayList<int[]>();

int[] id = {2,3};
myAL.add(id);

我相信你可以在没有引用的情况下向 ArrayList 添加简单的整数,那么为什么你不能在没有引用的情况下添加数组。

谢谢,

【问题讨论】:

  • {2,3} 这并不意味着匿名对象需要 myAl.add(new int [] {2,3});
  • 我认为你只能将一个 Int 数组添加到一个 ArrayList 而不是它的值
  • 这个问题和ArrayList完全没有关系,只是语法错误。

标签: java reference arraylist integer


【解决方案1】:

在数组声明之外声明整数数组时,您总是需要使用anonymous array syntax。此语法在 Java 语言规范中的 Array Creation Expressions 下进行了描述,并表明使用了 new 关键字

 ArrayCreationExpression:
    new PrimitiveType DimExprs Dimsopt
    new ClassOrInterfaceType DimExprs Dimsopt
    new PrimitiveType Dims ArrayInitializer 
    new ClassOrInterfaceType Dims ArrayInitializer

这就是为什么

int[] id = {2,3}; // declaration

是有效的语法,而

int[] id;
id = {2,3}; // assignment - outside declaration - fails compilation

不是。因此有必要使用

myAL.add(new int[]{2,3});

【讨论】:

    【解决方案2】:

    您的{2, 3}ArrayInitializer 的一个示例。根据 JLS:

    10.6. Array Initializers

    "可以在声明中指定数组初始化器(§8.3§9.3§14.4),或作为数组创建表达式的一部分(§15.10),以创建数组并提供一些初始值。”

    前三种情况用于声明变量,这不是你在做的。最后一种情况对应于您要执行的操作...创建一个数组实例...但是如果您查看链接部分,您会发现您需要使用 Java new 关键字来执行此操作。


    那么为什么 Java 语法不允许你这样做(myAL.add({2,3});)?

    嗯,我认为主要原因是{2, 3} 不足以说明在所有此类上下文中应该创建什么类型的数组。

    考虑一下:

        ArrayList myAL = new ArrayList();
    
        myAL.add({2,3});
    

    这里适合什么样的数组?应该是int[] 吗?还是long[]?还是Integer[]?还是Object[]

    要记住的另一件事是,数组初始值设定项是 Java 1.0 中 Java 语言的一部分……早在 Java 语言包含泛型类型和可能(假设)允许以合理的方式解决歧义的有限类型推断之前时尚。

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      相关资源
      最近更新 更多