回答

收藏

在一行中初始化 ArrayList

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

我想为测试目的创建一个选项列表。起初,我这样做了:7 f( K3 j, l8 n+ n
    ArrayList places = new ArrayList();places.add("Buenos Aires");places.add("Córdoba");places.add("La Plata");% E/ R- C9 T! N, X  k6 q6 s1 F
然后我将代码重构如下:
' j9 ?' v) j- h" E0 Q* o
    ArrayList places = new ArrayList(    Arrays.asList("Buenos Aires","Córdoba","La Plata"));
    - f' p! o- P4 \7 g6 y( v
有没有更好的方法?4 S% B. n( G7 c  W  z1 Z- U0 c$ n" P
                                                                / T# T( H" h5 \+ [! v# T) p
    解决方案:                                                                / x: e9 O, X' t! A: \- `
                                                                事实上,初始化的最佳方法可能是ArrayList这是你写的方法,因为它不需要List创造新方法的任何方法:
7 E4 m! c2 N1 G" O# P
    ArrayList list = new ArrayList();list.add("A");list.add("B");list.add("C");
    + c' ^2 f- Y6 t/ z' e4 V& H
需要注意的是,应该引用它list实例需要大量输入。+ Q4 B; p" T! N# L% m; H; a
还有其他选择,比如用实例初始化器创建匿名内部类(又称双括号初始化):4 m# _/ B% n5 Q* r# }
    ArrayList list = new ArrayList() {    add("A");    add("B");    add("C");}};# e/ h' H+ h6 Z
但是,我不太喜欢这种方法,因为你终于得到了一个ArrayList有实例初始化程序的子类,创建这类只是为了创建一个对象——对我来说似乎有点矫枉过正。
/ ?4 A2 y3 T+ }; j1 @: `. i& ~如果项目 Coin的Collection Literals 接受提案将是一件好事(计划在 Java 7 引入,但不太可能成为 Java 8 的一部分。):# c9 R. R: }% o. r( f9 `( L6 A
    List list = ["A","B","C"];' r7 r+ C: ?0 L2 ?6 F
不幸的是,它在这里对你没有帮助,因为它将初始化为不可改变的List而不是一个ArrayList,而且,如果有,就不能用了。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则