Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java addAll(ArrayList)有时抛出不支持的操作异常_Java_List_Exception_Arraylist - Fatal编程技术网

Java addAll(ArrayList)有时抛出不支持的操作异常

Java addAll(ArrayList)有时抛出不支持的操作异常,java,list,exception,arraylist,Java,List,Exception,Arraylist,我有一个从一些分页字符串数据中读取列表的代码。我不明白的是-为什么会在addAll()上抛出UnsupportedOperationException,为什么它是一种随机行为? 我知道创建目标ArrayList而不添加到返回的ArrayList解决了这个问题,我希望更好地理解它,而不是修复它 List<Event> eventList = eventTable.getEvents(); // returns ArrayList while (hasNextPage()) { go

我有一个从一些分页字符串数据中读取列表的代码。我不明白的是-为什么会在addAll()上抛出UnsupportedOperationException,为什么它是一种随机行为?

我知道创建目标ArrayList而不添加到返回的ArrayList解决了这个问题,我希望更好地理解它,而不是修复它

List<Event> eventList = eventTable.getEvents(); // returns ArrayList
while (hasNextPage()) {
  goToNextPage();
  eventList.addAll(eventTable.getEvents());
}
List eventList=eventTable.getEvents();//返回ArrayList
while(hasNextPage()){
goToNextPage();
addAll(eventTable.getEvents());
}
列表
不一定是
数组列表
。(但事实恰恰相反。)

有时会出现
UnsupportedOperationException
的原因是因为
eventTable.getEvents()
有时返回支持
addAll
的列表,有时不支持

例如,
getEvents
的实现可以如下所示:

if (noEventsAvailable) {
    return Collections.emptyList();
} else {
    List<Event> toReturn = new ArrayList<Event>();
    // populate list...
    return toReturn;
}

它取决于
列表的实际实现


e、 g如果使用调用
addAll()
或任何其他修改方法获得基础列表,则在抛出异常时,将抛出
UnsupportedOperationException

,它应向您显示准确的行号和源代码文件-您应该能够确切了解它抛出异常的原因


我的猜测是,在某些情况下,
eventTable.getEvents()
返回一个不可变的列表,或者类似的东西-但是如果不知道
eventTable
是什么,就很难确定了。如果您能生成一个简短但完整的程序来演示问题,那么诊断起来就容易多了。

通常是一个用数组包装的数组。asList()您是对的,我错过了默认的Collections.emptyList()。这一定是原因。
List<Event> eventList = new ArrayList<Event>(eventTable.getEvents());