我有下一个代码:
ServiceInstanceSupplier
它可以编译,但是在运行时我有UnsupportedOperationException。为什么会发生?
答案 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的可变参数