直接在Java中设置ArrayList的值

wai*_*933 13 java arraylist

设置Java ArrayList的值列表有效:

Integer[] a = {1,2,3,4,5,6,7,8,9};
ArrayList<Integer> possibleValues2 = new ArrayList<Integer>(Arrays.asList(a));
Run Code Online (Sandbox Code Playgroud)

但是,以下操作不起作用,并且具有错误"非法启动类型"以及其他错误.为什么不?由于第一个代码块中的第一行只是赋值,它不应该没有效果吗?

ArrayList<Integer> possibleValues2 = new ArrayList<Integer>(Arrays.asList({1,2,3,4,5,6,7,8,9}));
Run Code Online (Sandbox Code Playgroud)

Pét*_*rök 22

您应该使用vararg版本Arrays.asList,例如

ArrayList<Integer> possibleValues2 =
    new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7,8,9));
Run Code Online (Sandbox Code Playgroud)

或显式创建数组参数,例如

ArrayList<Integer> possibleValues2 =
    new ArrayList<Integer>(Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9}));
Run Code Online (Sandbox Code Playgroud)


Jef*_*man 6

一个奇怪的,很少使用的成语,

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

这是创建一个扩展ArrayList(外括号)的匿名类,然后实现实例初始化器(内括号)并在那里调用List.add().

一个好的面试问题,如果没有别的.

  • 知道这一点当然很高兴并且对于访谈来说绝对有价值,因为这是一个常见问题,但我认为创建像ArrayList这样的标准类的匿名子类是一种不好的做法.从OOP的角度来看,只有当新类具有旧类未命中的功能时,才应扩展类.并且它将使用子类名称OuterClass $ 1.class或类似的东西丢弃您的代码库. (3认同)