【问题标题】:Catching Exceptions From Multiple Methods Withing the Class从类中的多个方法中捕获异常
【发布时间】:2011-12-03 19:20:08
【问题描述】:

在 Java 中,我有一个类,其中包含一些引发相同自定义异常的方法(自定义异常扩展了“异常”类):

private void setAColor(float r, float g, float b, float a) throws AnException {}
private void setBColor(float r, float g, float b, float a) throws AnException {}
private void setCColor(float r, float g, float b, float a) throws AnException {}

我希望能够捕获它们并在类中处理它们,而不是让用户处理这些异常。每个方法异常都将以完全相同的方式被捕获。我不想在每个方法中都放置完全相同的 try/catch 方法块。有没有办法可以在方法体之外但在类内部捕获这些异常?

感谢您的宝贵时间,即使您无法帮助我。

附加更多信息:
这些方法可能会被调用到某个点:在调用将变量“isImmutable”设置为 true 的方法之后,这些方法应该不再能够更改对象的任何内容。因此,如果在“isImmutable”设置为 true 之后调用这些方法之一,那么它们应该抛出一个名为“ImmutableException”的异常。对于/这个特定的实现/,我希望能够自己处理这些,而不是去代码中调用这些方法的每个点,然后以完全相同的方式处理它们。

【问题讨论】:

  • AVD 说了什么,或者提供更多关于你想要做什么的细节。
  • 我认为你可以通过注释来做到这一点,但我缺乏知道如何做的能力

标签: java exception exception-handling try-catch throws


【解决方案1】:

换个角度,你考虑过改用工厂模式吗?与其调用将 isImmutable 设置为 true,不如调用它以获取 isImmutable 为 true 的实例......并且所讨论的方法返回没有可用 setter 的类的不同版本。

【讨论】:

    【解决方案2】:

    您可以将上述方法转换为调用的存根方法

    setColorDelagator(char abc, ...)
    

    委托给

    setColorAWithErrorHandling
    setColorBWithErrorHandling
    setColorCWithErrorHandling 
    

    在 try/catch 中。

    我同意这不是最佳方法,但我不确定更好的方法。

    【讨论】:

    • 我只是想这样做,有 COLOR_A、COLOR_B 等,你必须将其中一个作为参数传递。但考虑到课程的设置方式,使用@Daniel 提出的解决方案似乎更直观。
    【解决方案3】:

    我不想在每个方法中都放置完全相同的 try/catch 方法块。

    那就不要抛出异常了。

    有没有办法可以在方法体之外,但在类内部捕获这些异常?

    没有。

    对于/这个特定的实现/,我希望能够自己处理这些,而不是去代码中调用这些方法的每一个点,然后以完全相同的方式处理它们。

    这没有任何意义。如果检测到错误,您打算如何报告?

    在调用将变量“isImmutable”设置为 true 的方法后,这些方法应该不再能够更改对象的任何内容。因此,如果在“isImmutable”设置为 true 之后调用这些方法之一,那么它们应该抛出一个名为“ImmutableException”的异常。

    您是否考虑过让您的异常成为 RuntimeException 的子类?然后调用者不需要声明异常处理程序——如果没有处理程序,程序将由于“未处理的异常”而终止。

    【讨论】:

    • 让 ImmutableException 实现 RuntimeException 正是我需要做的。谢谢。
    最近更新 更多