Mar*_*Bro 8 java list add illegalargumentexception
我有代码
private List<Field> subFields;
private Collection<Field> subFieldsCollection;
...
try {
if (subFields == null && subFieldsCollection != null && !subFieldsCollection.isEmpty()) {
subFields = new ArrayList<>();
subFields.addAll(subFieldsCollection);
}
} catch (IllegalStateException e) {
...
}
Run Code Online (Sandbox Code Playgroud)
而且我想知道它怎么会IllegalStateException被扔掉.它显然发生在我的应用程序的用户身上,但我无法追踪错误.
文件Collection.addAll()说:
IllegalArgumentException - 如果由于插入限制,此时不能添加所有元素
但是什么是插入限制?
我想这取决于集合的确切类型.我使用的ArrayList,所以让我们检查的文档addAll()的List界面:
IllegalArgumentException - 如果指定集合的元素的某些属性阻止将其添加到此列表中
那么,什么元素属性可以阻止元素添加到List?我的两个集合属于同一类型,我应该能够添加空值.
有人可以向我解释一下吗?
根据您从用户那里获得的信息量,这可能是无法回答的。但我会做出一个猜测,如果有进一步的证据与它相矛盾,我会删除我的答案。:)
假设您编写了所有代码,我同意addAll()不能抛出IllegalStateException(并且所有讨论IllegalArgumentException都是无关紧要的)。
我的猜测是,错误不是源自该addAll()调用,而是源自代码中尝试操作这些集合之一的另一个调用(未显示)。例如,可以通过尝试迭代列表(使用通过 获得的迭代器)并删除一个项目,然后尝试删除另一个项目而不调用 来获得。类似地,可以将一个放入从 获得的迭代器中。所以我的猜测是,在操纵列表的某个地方,会发生其中一件事。IllegalStateException.iterator()Iterator.next()Iterator.set()ArrayList
或者,其他集合实现可以通过多种方式抛出异常。因此,如果我们不确定它是否与 相关ArrayList,那么我们就没什么可继续的了。