我有这个方法,它接受字符串的变量,从中创建一个List,然后尝试删除列表的第一个元素。
public void importFrom(String... files) {
List<String> fileList = Arrays.asList(files);
String first = fileList.remove(0);
// other stuff
}
但是只要remove
被调用,就会抛出UnsupportedOperationException
。我的猜测是返回List-Type不支持remove方法。我对么?我有哪些替代方案?
答案 0 :(得分:7)
Arrays.asList
仅在数组周围提供了一个瘦包装器。此包装器允许您使用List
API对阵列执行大多数操作。来自JavaDoc的引用:
返回由指定数组支持的固定大小列表。 [...] 此方法充当基于数组的API [...]
之间的桥梁
如果你真的想删除某些内容,那么这可能会有效:
List<String> realList = new ArrayList<String>(Arrays.asList(stringArray));
这个会创建一个真实的ArrayList
(支持remove
)并使用另一个列表的内容填充它,该列表恰好是String[]
的包装。
答案 1 :(得分:4)
Arrays.asList
提供数组的List视图,由数组提供BACKED。并且数组不可调整大小。任何改变其大小的尝试都会引发异常。
答案 2 :(得分:2)
您可以创建new ArrayList<String>()
,然后循环遍历所有文件for (String file : files) fileList.add(file);
。或者您可以使用已创建的List,并使用fileList.addAll(files);
答案 3 :(得分:1)
Arrays.asList()
返回Arrays.ArrayList
的实例,它是不可修改的列表,因为它是一个简单的数组包装器。您无法从数组中删除元素。
这是用asList()
:
返回由指定数组支持的固定大小列表。
答案 4 :(得分:0)
返回的列表充当支持的数组的view
。您无法直接修改列表,只能通过支持的阵列修改列表。但是,您无法调整阵列大小。