这是一个愚蠢的问题 - 但它让我感到烦恼
从现有的(库)Java异常中,我应该抛出以下内容
我有一个在错误场景中使用的方法(它的基本假设不成立)
这个方法没有参数 - 所以我倾向于跳过IllegalArgumentException
。
作为示例 - 考虑只有两个左/右子节点的BinaryNode
类。
为简洁起见,有一个removeOnlyChild()
方法很好,仅当此节点实际上只有一个子节点(不是0或2)时才适用。
显然,如果某人在有{2个子节点的节点n.removeOnlyChild()
上调用n
,则应抛出异常。
超出标准的Java异常 - 你认为它应该是什么,为什么?
我实际上每隔一段时间浏览一下这个列表,当弹出这个时,只需使用IllegalStateException
或InternalError
。
答案 0 :(得分:8)
我有一个在错误场景中使用的方法(它的基本假设不成立)。
这听起来像IllegalStateException
完全匹配:
表示在非法或不适当的时间调用了某个方法。
不可否认,“时间”部分感觉有点误导,但考虑到名称,将意义扩展为“当对象处于该呼叫处于不适当状态时已调用方法”似乎是合理的。如果迭代器在第一个元素之前或者已经删除了“current”元素,那么你的使用类似于Iterator.remove()
的抛出IllegalStateException
。
我肯定会使用InternalError
来解决虚拟机错误,而不是应用程序代码错误。