Java addAll(ArrayList)有时抛出不支持的操作异常
我有一个从一些分页字符串数据中读取列表的代码。我不明白的是-为什么会在addAll()上抛出UnsupportedOperationException,为什么它是一种随机行为? 我知道创建目标ArrayList而不添加到返回的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
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());