Java的隐藏功能 - ArrayList/instance初始化程序说明

Hei*_*bug 5 java initialization arraylist

Java隐藏特性问题中,我对实例初始化器的答案感兴趣.

我想知道如何修改这一行:

List<Integer> numbers = new ArrayList<Integer>(){{ add(1); add(2); }};
Run Code Online (Sandbox Code Playgroud)

为了使它与嵌套的Arraylists执行相同的工作:

ArrayList<ArrayList<Integer>> numbers = ...
Run Code Online (Sandbox Code Playgroud)

那可能吗?

Puc*_*uce 4

List<Integer> numbers = new ArrayList<Integer>(){{ add(1); add(2); }};
Run Code Online (Sandbox Code Playgroud)

我真的不推荐这种方法,因为它无缘无故地创建了一个(匿名)类。

使用以下任一方法:

List<Integer> numbers = Arrays.asList(1, 2);
Run Code Online (Sandbox Code Playgroud)

或者

List<Integer> numbers = new ArrayList<Integer>(Arrays.asList(1, 2));
Run Code Online (Sandbox Code Playgroud)

对于 2 个级别,您可以使用:

List<List<Integer>> numbers = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(2,3,4));
Run Code Online (Sandbox Code Playgroud)

通过静态导入,如果您确实想要的话,您甚至可以将其简化为:

List<List<Integer>> numbers = asList(asList(1, 2), asList(2,3,4));
Run Code Online (Sandbox Code Playgroud)