【问题标题】:Java: Initialize Array of two ArrayLists in One LineJava:在一行中初始化两个 ArrayList 的数组
【发布时间】:2016-04-21 06:37:15
【问题描述】:

是否可以在 Java 中将两个 ArrayList 的 Array 初始化为类字段?

现在我有以下内容。在字段声明中:

public ArrayList someArray[] = new ArrayList[2];

然后在其中一种方法中实际分配:

someArray[0] = new ArrayList<String>();
someArray[1] = new ArrayList<String>();

【问题讨论】:

  • 是的,可以做到!您的代码似乎正确。数组只保存其中对象的引用,因此对象本身可以是任何东西

标签: java arrays declaration


【解决方案1】:

可以做到的:

public ArrayList<String[]>[]
    someArray = new ArrayList[] {new ArrayList<String[]>(),new ArrayList<String[]>()};

在 OP 澄清后编辑。

【讨论】:

  • @TranslucentCloud 什么不起作用?注意它是new ArrayList[],而不是new ArrayList&lt;String&gt;[],因为你不能实例化一个泛型类型的数组,但是最好让变量本身的类型是泛型的。
  • 如果我是正确的,那是因为你不能创建一个类型对象数组。在这里,您正在尝试执行ArrayList&lt;String&gt;[](在声明中)。它应该减少到ArrayList[] 才能工作,如Manu AG's answer。在这种情况下,泛型参数的丢失一直困扰着我。
  • @Eran 好吧,稍后在代码中我有 someVar[index].add(someArrayOfStrings); 行,但它失败了。
  • @TranslucentCloud 如果您尝试将String[] 添加到ArrayList&lt;String&gt;,当然它不会起作用。我假设您希望您的 ArrayLists 包含 Strings,而不是 String 数组。您必须将声明更改为 public ArrayList&lt;String[]&gt; someArray[] = new ArrayList[] {new ArrayList&lt;String[]&gt;(),new ArrayList&lt;String[]&gt;()};
  • @TranslucentCloud 您问题中的new ArrayList&lt;String&gt; 陈述具有误导性。我更新了答案以反映您想要存储在内部 ArrayLists 中的内容。请注意,JLS 强烈反对使用原始类型。使用泛型类型可以让编译器阻止您按照 Manu 代码的允许将 String[] 添加到 ArrayList&lt;String&gt;
【解决方案2】:

试试这个:

public ArrayList[] arrayOfArrayLists = new ArrayList[]{new ArrayList<String>() , new ArrayList<String>()};

【讨论】:

  • 强烈建议不要使用原始类型,如 JLS - The use of raw types is allowed only as a concession to compatibility of legacy code. The use of raw types in code written after the introduction of generics into the Java programming language is strongly discouraged. It is possible that future versions of the Java programming language will disallow the use of raw types. 中所述
猜你喜欢
  • 2012-04-30
  • 2010-11-03
  • 2011-07-30
  • 2011-03-10
  • 2010-12-28
相关资源
最近更新 更多