我知道你可以在实例化过程中初始化一个数组,如下:

String[] names = new String[] {"Ryan", "Julie", "Bob"};

有没有办法对数组列表做同样的事情?或者我必须用array.add()单独添加内容?


当前回答

Yes.

new ArrayList<String>(){{
   add("A");
   add("B");
}}

这实际上是在创建一个派生自ArrayList<String>的类(外部花括号的功能),然后声明一个静态初始化器(内部花括号的功能)。这实际上是包含类的内部类,所以它有一个隐式This指针。这不是问题,除非你想序列化它,或者你希望外部类被垃圾收集。

我知道Java 7将提供额外的语言结构来完成您想要的工作。

编辑:最近的Java版本为创建这样的集合提供了更多可用的函数,并且值得研究以上(在这些版本之前提供)

其他回答

这就是如何使用op4j Java库(1.1。12月10日发布):-

List<String> names = Op.onListFor("Ryan", "Julie", "Bob").get();

这是一个非常酷的库,可以节省你大量的时间。

这个怎么样?

ArrayList<String> names = new ArrayList<String>();
Collections.addAll(names, "Ryan", "Julie", "Bob");
Arrays.asList("Ryan", "Julie", "Bob");

这是你能得到的最接近的答案:

ArrayList<String> list = new ArrayList(Arrays.asList("Ryan", "Julie", "Bob"));

你可以用更简单的方法:

List<String> list = Arrays.asList("Ryan", "Julie", "Bob")

查看数组的源代码。asList,它构造一个数组列表,但默认情况下转换为List。所以你可以这样做(但对新的jdk不可靠):

ArrayList<String> list = (ArrayList<String>)Arrays.asList("Ryan", "Julie", "Bob")

数组。asList可以在这里提供帮助:

new ArrayList<Integer>(Arrays.asList(1,2,3,5,8,13,21));