This question already has answers here:
remove() on List created by Arrays.asList() throws UnsupportedOperationException
                                
                                    (3个答案)
                                
                        
                                2年前关闭。
            
                    
使用方法返回的列表引用添加元素时出现错误。

Dummy.java

package firstPro;

import java.util.List;

public class Dummy {

    private List<String> names;

    public Dummy(List<String> names) {
        this.names = names;
    }

    public List<String> getNames() {
        return this.names;
    }

}


主要

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)


我知道我可以通过添加来摆脱此错误


  新的ArrayList(obj.getNames())


我的问题是为什么我不能使用该裁判作为原始裁判?

最佳答案

Arrays.asList("foo1", "foo2", "foo3", "foo4", "foo5")创建一个固定大小的列表,因此您不能在其中添加/删除元素(只能修改现有元素或替换现有索引中的元素)。

您可以使用:

new ArrayList<>(Arrays.asList("foo1", "foo2", "foo3", "foo4", "foo5"))


支持添加新元素。

10-01 06:06
查看更多