小编典典

调用list.remove(0)时出现奇怪的UnsupportedOperationException

java

我有这种方法,它使用字符串的可变参数,从中创建一个列表,然后尝试删除列表的第一个元素。

public void importFrom(String... files) {
    List<String> fileList = Arrays.asList(files);

    String first = fileList.remove(0);
    // other stuff
}

但是,一旦remove被调用,UnsupportedOperationException就会抛出一个。我的猜测是返回的List-
Type不支持remove方法。我对么?我有什么选择?


阅读 321

收藏
2020-11-30

共1个答案

小编典典

Arrays.asList仅在数组周围提供薄包装。该包装器使您可以使用API 对阵列执行 大多数 操作List。JavaDoc的引文:

返回由指定数组支持的 固定大小的 列表。[…]此方法充当基于数组的API和基于集合的API之间的桥梁[…]

如果您确实要删除某些内容,则可以这样做:

List<String> realList = new ArrayList<String>(Arrays.asList(stringArray));

这个创建一个真实的ArrayList(支持remove)并用另一个列表的内容填充它,恰好是您的包装器String[]

2020-11-30