回答

收藏

在一行中初始化 ArrayList

技术问答 技术问答 215 人阅读 | 0 人回复 | 2023-09-12

我想为测试目的创建一个选项列表。起初,我这样做了:0 L$ x; |# ?$ Q, p) Z; X
    ArrayList places = new ArrayList();places.add("Buenos Aires");places.add("Córdoba");places.add("La Plata");  Z; `  u1 E' V
然后我将代码重构如下:
( J5 C* v& K7 q6 o& W
    ArrayList places = new ArrayList(    Arrays.asList("Buenos Aires","Córdoba","La Plata"));
    ; g+ U  T' @8 H9 |- j
有没有更好的方法?
9 H; ]8 K/ G# @% V6 T* ?# l  u* f                                                               
! R' X: o) A0 q    解决方案:                                                               
% B' P. y% t* G" B$ [0 w                                                                事实上,初始化的最佳方法可能是ArrayList这是你写的方法,因为它不需要List创造新方法的任何方法:3 S2 a& g+ t1 V) A
    ArrayList list = new ArrayList();list.add("A");list.add("B");list.add("C");% z. o9 a2 X. K
需要注意的是,应该引用它list实例需要大量输入。# l% V  j/ s- \! Z
还有其他选择,比如用实例初始化器创建匿名内部类(又称双括号初始化):. t. K% J1 X) e1 g
    ArrayList list = new ArrayList() {    add("A");    add("B");    add("C");}};2 E' @4 J( h1 L
但是,我不太喜欢这种方法,因为你终于得到了一个ArrayList有实例初始化程序的子类,创建这类只是为了创建一个对象——对我来说似乎有点矫枉过正。
8 c5 K* t9 I* ^如果项目 Coin的Collection Literals 接受提案将是一件好事(计划在 Java 7 引入,但不太可能成为 Java 8 的一部分。):: q! y; j/ y! S4 O! _0 B2 e6 V) y+ z
    List list = ["A","B","C"];7 p7 g* T2 V+ m& [; D& o
不幸的是,它在这里对你没有帮助,因为它将初始化为不可改变的List而不是一个ArrayList,而且,如果有,就不能用了。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则