【发布时间】:2013-12-02 22:27:50
【问题描述】:
这是一个愚蠢的问题 - 但它困扰着我。
从现有的(库)Java 异常中,我应该抛出以下异常。
我有一个在错误场景中使用的方法(它的基本假设不成立)。
这个方法没有参数——所以我倾向于跳过IllegalArgumentException。
例如 - 考虑一个只有两个左/右子节点的 BinaryNode 类。
为简洁起见,最好有一个 removeOnlyChild() 方法,该方法仅适用于该节点实际上只有一个子节点(不是 0 或 2)。
显然,如果有人在有 2 个孩子的节点 n 上调用 n.removeOnlyChild(),则应该抛出异常。
超出标准 Java 异常 - 您认为应该是什么,为什么?
我实际上每隔一段时间就会检查一次列表,当它弹出时,只需使用IllegalStateException 或InternalError。
【问题讨论】:
-
我会创建自己的自定义异常派生类并抛出它。这样您就可以确切地知道它被抛出的原因。
-
一开始就有这样的方法是明智的吗?你不应该有 removeLeft()、removeRight() 和 removeAll() 吗?您是否至少有一个 childCount() 方法允许调用者在调用它之前检查他是否可以安全地调用 removeOnlyChild()?
-
一般来说,你不应该抛出
InternalError或Error的任何其他子类,除非你有充分的理由这样做。按照设计,Error的子类不会被... } catch (Exception ex) { ...捕获 -
@JB 是的,当然我有 childCount() 供用户安全使用。然而,这更笼统一点,即在调用方法时不满足假设时抛出的内容。
-
@MikeHarris 谢谢!我不知道!