【发布时间】:2015-07-22 11:07:59
【问题描述】:
我有代码
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) {
...
}
我想知道IllegalStateException 怎么会被抛出。这显然发生在我的应用程序的用户身上,但我无法追踪问题所在。
Collection.addAll() 的文档说:
IllegalArgumentException - 如果由于插入限制,此时不能添加所有元素
但是插入限制是什么?
我想这取决于集合的确切类型。我正在使用 ArrayList,所以让我们查看 addAll() 的 List 接口的文档:
IllegalArgumentException - 如果指定集合的某个元素的某些属性阻止它被添加到此列表中
那么,什么元素属性可以阻止将元素添加到列表中?我的两个集合是同一类型的,我应该能够添加空值..
谁能给我解释一下?
【问题讨论】:
-
我这里只是在暗处拍,会不会连接到并发?
-
目前尚不清楚您使用的是哪个版本的 Java,但 Java SE 6 的源代码从不会从
addAll()抛出该异常,除非在访问Collection时间接抛出异常。你看过堆栈跟踪,确定异常是在哪里抛出的吗? -
请将异常的堆栈跟踪添加到您的问题中。
-
@VGR @DanAllen 我正在使用 Java SE 7,但遗憾的是无法访问堆栈跟踪。我在我正在开发的一个应用程序中发现了这段代码,封装在
IllegalStateException的 try catch 块中,并且正在徘徊怎么会发生这种情况。 -
除非 subFields.addAll 行是该 try 块中的唯一行,否则您如何确定 addAll 是导致异常的原因,而不查看堆栈跟踪?
标签: java list add illegalargumentexception