我使用按方法返回的列表引用添加元素时出错。
Dummy.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class count {
public static void main(String[] args) {
Dummy obj = new Dummy(Arrays.asList("foo1", "foo2", "foo3", "foo4", "foo5"));
List<String> name = obj.getNames();
name.add("foo6");
System.out.println(name);
}
}
主要
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at firstPro.count.main(count.java:13)
错误
{{1}}
我知道我可以通过添加
来摆脱这个错误new ArrayList(obj.getNames())
我的问题是为什么我不能将那种引用用作原始的?
答案 0 :(得分:2)
来自Arrays.asList(...)
的JavaDoc,强调我的:
返回由指定数组支持的固定大小列表。
您可以使Dummy
处理修改,方法是将接收到的列表中的值复制到新的ArrayList
实例中,
通过更改其构造函数:
public Dummy(List<String> names) {
this.names = new ArrayList<>(names);
}
答案 1 :(得分:2)
Arrays.asList("foo1", "foo2", "foo3", "foo4", "foo5")
创建一个固定大小的列表,因此您无法向其添加/删除元素(仅修改现有元素或替换现有索引中的元素)。
您可以使用:
new ArrayList<>(Arrays.asList("foo1", "foo2", "foo3", "foo4", "foo5"))
支持添加新元素。
答案 2 :(得分:1)
引用Arrays.asList
的文档:
返回由指定数组支持的固定大小列表。
由于返回的List
具有固定大小,因此它不支持add
操作,并且调用它会抛出UnsupportedOperationException
,因为您已经注意到了。