回答

收藏

在一行中初始化 ArrayList

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

我想为测试目的创建一个选项列表。起初,我这样做了:; V8 S# c7 n: \5 Y8 W5 G
    ArrayList places = new ArrayList();places.add("Buenos Aires");places.add("Córdoba");places.add("La Plata");( a# U) d* Y+ V+ j5 T
然后我将代码重构如下:
! L$ L  G% M4 n; E
    ArrayList places = new ArrayList(    Arrays.asList("Buenos Aires","Córdoba","La Plata"));
    & P0 g1 Y  Y  V, p
有没有更好的方法?
9 x& Y+ n  V0 o3 u7 ^! g                                                                7 O8 o0 K+ F1 @5 v
    解决方案:                                                                , W) s/ Y9 `2 }  ^
                                                                事实上,初始化的最佳方法可能是ArrayList这是你写的方法,因为它不需要List创造新方法的任何方法:
7 Z+ U# G! ]) R4 k
    ArrayList list = new ArrayList();list.add("A");list.add("B");list.add("C");. K3 X9 z2 G6 f8 b  L
需要注意的是,应该引用它list实例需要大量输入。% X1 g/ g) o' H4 j6 Z( [; O2 J* {
还有其他选择,比如用实例初始化器创建匿名内部类(又称双括号初始化):
6 G1 a$ [  z0 r1 V3 n
    ArrayList list = new ArrayList() {    add("A");    add("B");    add("C");}};+ h, ?5 `7 Y5 `$ A. C
但是,我不太喜欢这种方法,因为你终于得到了一个ArrayList有实例初始化程序的子类,创建这类只是为了创建一个对象——对我来说似乎有点矫枉过正。
6 d. j0 n! _( u0 ?% S( ^: W如果项目 Coin的Collection Literals 接受提案将是一件好事(计划在 Java 7 引入,但不太可能成为 Java 8 的一部分。):
" {0 G) s3 z8 M
    List list = ["A","B","C"];" E: r% g8 M7 ?* Z2 q
不幸的是,它在这里对你没有帮助,因为它将初始化为不可改变的List而不是一个ArrayList,而且,如果有,就不能用了。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则