问题

我想为测试目的创建一个选项列表.首先,我这样做:

 ArrayList<String> places = new ArrayList<String>();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");
 

然后我重构代码如下:

 ArrayList<String> places = new ArrayList<String>(
    Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));
 

有没有更好的方法来做到这一点?

  最佳答案

实际上,可能初始化ArrayList的“最佳”方法是您编写的方法,因为它不需要以任何方式创建一个新的List:

 ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
 

捕捉到的是,需要相当多的输入才能引用 list 实例。

有一些替代方案,例如使用实例初始化器制作匿名内部类(也称为“双支持初始化”):

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

但是,我不太喜欢这个方法,因为你最终得到的是ArrayList的子类,它有一个实例初始化器,并且创建该类只是为了创建一个对象 – 这对我来说似乎有点过分.

如果 Collection Literals提案 for Project Coin 被接受(它计划在Java 7中引入,但它也不可能是Java 8的一部分.):

 List<String> list = ["A", "B", "C"];
 

不幸的是,它不会帮助您,因为它将初始化一个不可变的List而不是一个ArrayList,此外,如果它将永远存在,它还不可用.

  相同标签的其他问题

javacollectionsarraylistinitialization