0

在 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”的异常。对于/这个特定的实现/,我希望能够自己处理这些,而不是去代码中调用这些方法的每一个点,然后以完全相同的方式处理它们。

4

3 回答 3

1

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

然后不要抛出异常。

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

不。

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

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

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

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

于 2011-10-09T03:25:50.360 回答
1

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

setColorDelagator(char abc, ...)

哪个代表

setColorAWithErrorHandling
setColorBWithErrorHandling
setColorCWithErrorHandling 

在尝试/捕获中。

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

于 2011-10-09T03:42:08.277 回答
0

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

于 2011-10-09T04:41:38.533 回答