我无法添加列表

时间:2019-02-26 14:52:56

标签: java

我有下一个代码:

ServiceInstanceSupplier

它可以编译,但是在运行时我有UnsupportedOperationException。为什么会发生?

3 个答案:

答案 0 :(得分:1)

Arrays.asList(String...)创建一个不可修改的数组。像这样用另一个ArrayList包裹它:

List<String> str = new ArrayList<>(Arrays.asList("cat","tiger","dog","mouse"));
str.add("horse");

答案 1 :(得分:0)

Arrays.asList()返回的列表为fixed-size and backed by the array you pass,因此您无法添加或删除元素,因为这也意味着更改数组。 (请注意,如果您查看源代码,将会发现Arrays.asList()将返回java.util.Arrays.ArrayList的实例,您不应将它与可能已经知道的java.util.ArrayList混淆)。 / p>

相反,您需要创建另一个列表,例如,通过调用new ArrayList<String>( Arrays.asList(...))来创建复制列表的有效副本。

Java 8+的方式可能是这样:

List<String> str = Stream.of( "cat","tiger","dog","mouse" ).collect( Collectors.toList() );

答案 2 :(得分:0)

这称为后备列表。 支持列表,它是在将数组转换为列表时创建的,但请记住,数组中的元素与列表中的元素链接在一起,因此您无法添加或删除任何东西,并且您正在使用类似于array的可变参数