【问题标题】:What exception to throw - "Wrong Scenario" (Java) [closed]抛出什么异常-“错误的场景”(Java)[关闭]
【发布时间】:2013-12-02 22:27:50
【问题描述】:

这是一个愚蠢的问题 - 但它困扰着我。
从现有的(库)Java 异常中,我应该抛出以下异常。
我有一个在错误场景中使用的方法(它的基本假设不成立)。
这个方法没有参数——所以我倾向于跳过IllegalArgumentException

例如 - 考虑一个只有两个左/右子节点的 BinaryNode 类。

为简洁起见,最好有一个 removeOnlyChild() 方法,该方法仅适用于该节点实际上只有一个子节点(不是 0 或 2)。
显然,如果有人在有 2 个孩子的节点 n 上调用 n.removeOnlyChild(),则应该抛出异常。
超出标准 Java 异常 - 您认为应该是什么,为什么?

我实际上每隔一段时间就会检查一次列表,当它弹出时,只需使用IllegalStateExceptionInternalError

【问题讨论】:

  • 我会创建自己的自定义异常派生类并抛出它。这样您就可以确切地知道它被抛出的原因。
  • 一开始就有这样的方法是明智的吗?你不应该有 removeLeft()、removeRight() 和 removeAll() 吗?您是否至少有一个 childCount() 方法允许调用者在调用它之前检查他是否可以安全地调用 removeOnlyChild()?
  • 一般来说,你不应该抛出InternalErrorError 的任何其他子类,除非你有充分的理由这样做。按照设计,Error 的子类不会被 ... } catch (Exception ex) { ... 捕获
  • @JB 是的,当然我有 childCount() 供用户安全使用。然而,这更笼统一点,即在调用方法时不满足假设时抛出的内容。
  • @MikeHarris 谢谢!我不知道!

标签: java exception


【解决方案1】:

我有一个在错误场景中使用的方法(它的基本假设不成立)。

这听起来与IllegalStateException 完全匹配:

表示方法已在非法或不适当的时间被调用。

诚然,“时间”部分感觉有点误导,但考虑到这个名称,将其含义扩展为“当对象处于不适合该调用的状态时调用了一个方法”似乎是合理的。您的使用类似于 Iterator.remove() 的使用,如果迭代器在第一个元素之前或已经删除了“当前”元素,则会抛出 IllegalStateException

我肯定会使用 InternalError 来处理虚拟机错误,而不是应用程序代码错误。

【讨论】:

  • 谢谢。听起来是对的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
相关资源
最近更新 更多