根据评论
Collections.emptyList()
方法
它返回一个空的不可变列表。
如果我们直接赋值给对象,这是合理的。
例子:
public class ImmutableList {
public static void main(String[] args){
List<String> namesList=Collections.emptyList();
String[] names = {"Name1", "Name2", "Name3"};
namesList.addAll(Arrays.asList(names));
}
private List<String> getList() {
String[] names = {"Name1", "Name2", "Name3"};
return Arrays.asList(names);
}
}
如果运行上述程序,它将引发以下异常
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at java.util.AbstractCollection.addAll(AbstractCollection.java:344)
at org.learn.list.ImmutableList.main(ImmutableList.java:11)
但是,如果我们将一个方法的输出分配给这个变量,那么它运行良好。
例子:
public class ImmutableListTest2 {
public static void main(String[] args){
List<String> namesList=Collections.emptyList();
ImmutableListTest2 ce = new ImmutableListTest2();
namesList = ce.getList();
namesList.forEach(System.out::print);
}
private List<String> getList() {
String[] names = {"Name1", "Name2", "Name3"};
return Arrays.asList(names);
}
}
输出:
Name1Name2Name3
我的问题是名称列表在任何情况下都应该是不可变的。
为什么我们能在第二种情况下改变这个变量。
它应该扔
UnsupportedOperationException
在所有情况下。
如有任何帮助,我们将不胜感激。谢谢!