我有密码
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
怎么会发生这种情况。这显然发生在我的应用程序的一个用户身上,但我无法跟踪出了什么问题。
集合的文档。addAll()表示:
IllegalArgumentException-如果不是,由于插入限制,此时可以添加所有元素
但插入限制是什么?
我想这取决于收藏品的确切类型。我正在使用ArrayList,所以让我们检查
List
接口的addAll()
文档:
IllegalArgumentException-如果指定集合的元素的某些属性阻止将其添加到此列表中
那么,什么元素属性可以阻止元素被添加到列表中?我的两个集合是相同的类型,我应该能够添加空值。.
有人能给我解释一下吗?
这确实取决于实施情况。如果您查看文档中的ArrayList
,它是您实际使用的类,您将看到这一点。
如果指定的集合为null,则抛出:NullPointerExcture
因此,您的ArrayList
不应抛出IllegalArgumentException
。如果您要使用另一个实现或包装器(请参阅不可修改列表,请注意,此示例不会引发此类异常),它可能会引发此类异常。
因此,从您的用户那里获取日志,并尝试重现该问题。
您的代码永远不能抛出IllegalArgumentExcture,因为ArrayList#addAll不能抛出这样的异常。
为了获得该异常,您必须使用一个实现集合的类,在该类中可以抛出此类异常。您可以通过扩展ArrayList和覆盖所涉及的方法来轻松创建自己的方法。
根据用户提供的信息量,这可能无法回答。但我会做一个猜测,如果有进一步的证据与我的答案相抵触,我会删除我的答案
假设您编写了所有代码,我同意addAll()
不能抛出IllegalStateException
(所有关于IllegalArgumentException
的讨论都是无关的)。
我的猜测是,错误不是源于addAll()
调用,而是源于代码中另一个试图操作其中一个集合的调用(未显示)。例如,可以通过尝试迭代列表(使用通过.iterator()
获得的迭代器)并删除一个项,然后尝试删除另一个项而不调用迭代器来获取
非法状态异常。next()
。类似地,迭代器。set()
可以在从ArrayList
获取的迭代器中抛出一个。所以我猜,在操纵列表的某个地方,会发生这样的事情。
或者,其他集合实现可以通过多种方式抛出一个。因此,如果我们不确定它是否属于
ArrayList
,那么我们就没有什么可做的了。
我已经用Java编写代码一段时间了。但有时,我不知道什么时候应该抛出异常,什么时候应该捕获异常。我正在做一个有很多方法的项目。层次结构是这样的- 所以目前我正在做的是-我在所有方法中抛出异常并在方法A中捕获它,然后将其记录为错误。 但我不确定这是否是正确的方法?或者我应该开始在所有方法中捕获异常。这就是为什么这种混乱始于我的 - 我什么时候应该抓住异常与何时应该抛出异常。我知道这是一个愚蠢的问题,
这是我如何使用它 - 此外,我已经在超文本传输协议GET周围放置了一个最终块- 这是我的堆栈跟踪- 我正在使用Quartz来安排监控Httpendpoint的工作…这是我的连接池配置 马文依赖..神器版本 编辑-嗯,这个问题通过在最后一个块中不关闭CloseableHttp客户端而得到解决…有人能告诉我为什么它会这样吗?如果我关闭客户端,为什么连接池会关闭? 上面的closeablehttpcli
问题内容: 最近,我接受了公司的采访,他们给了我一个编码问题。我得到了与纸牌有关的程序,其中一种方法是将纸牌洗牌。因此,我将该程序编写为: 在上面的代码中,我引发了我最怀疑的 IllegalArgumentException 。在什么情况下实际上应该抛出运行时异常?我们是否应该实际抛出运行时异常? 谢谢 问题答案: 我们是否应该实际抛出运行时异常? 是的,我们应该。运行时异常有特定的用途-它们发出
我正在尝试使用下面的快速加载API 连接…等是完美的。 我确切地知道它在哪里失败 例外情况是 < code >线程“main”Java . lang . illegalstateexception中出现异常:示例失败。 这是我试图上传的表格。它是格式,当我通过记事本打开它时,它看起来像这样 为什么我会得到这个异常?我该如何改进?据我理解问题是< code > pstmtfld . setascii
问题内容: 在我的应用程序中,有时会引发以下异常: 很难找到错误,因为在stacktrace中没有列出我的方法。那么,有人知道何时抛出此异常吗?感谢您的任何提示。 问题答案: 您可以在stacktrace中看到错误: 适配器的内容已更改,但ListView没有收到通知。确保不从后台线程修改适配器的内容,而仅从UI线程修改。 您应该调查一个线程,并使其与UI线程同步。 在Android中执行此操作的
所以我必须做以下其中之一: 在每个doSomething调用周围添加try catch块 在main中添加throws语句 删除doSomething中的throws语句 将该条件作为前提条件,这样不遵循该条件就会导致未定义的行为或类似的行为。 3将不起作用,因为doSomething可能会在客户端使用时引发异常。1和2简直是多余的,我认为应该避免。 我的问题是:在提到的选项(或任何其他选项)中,