我们需要有两个功能。他们做同样的事情,但一个处理异常,一个抛出异常。注意:如果要处理异常,则必须在下面的commonFunc()中处理异常。在functionHandlesEx()中处理异常是行不通的,因为要处理函数需要只在commonFunc()中可用的变量。为了重用代码,我们得到了以下内容。你看到它的任何问题(我可以看到一个问题是:函数抛出异常,但实际上当isExceptionHandled为真时抛出没有异常----但Java允许这样做)?有更好的方法吗?我们在Java 6.谢谢。
public void functionThrowsEx() throws Exception e
{
commonFunc(false); //false means does not handle exception
}
public void functionHandlesEx()
{
try
{
commonFunc(true); //true means handle exception
}
catch (Exception e)
{
// do nothing as exception handled
}
}
private void commonFunc(final boolean isExceptionHandled) throws Exception
{
try
{
....
}
catch (Exception e)
{
if (isExceptionHandled)
{
//handle the exception
}
else
{
throw e;
}
}
}
答案 0 :(得分:0)
这似乎是处理异常的过于复杂的方法。我理解它的玩具代码来显示你在做什么,但我没有遇到很多理由来创建嵌套调用以处理异常。
理想情况下,可以导致异常的代码应该具有处理异常的方法,使用try ... catch,也许最后。这个逻辑流程似乎在非平凡的应用程序中非常复杂,并且会导致复杂性增加和调试困难。
答案 1 :(得分:0)
你应该摆脱这两个函数,并避免嵌套try / catch块。如果必须嵌套它们,请通过将逻辑保持在相同的方法中使其尽可能地具有straigtfoward。
从代码中,我猜你想根据程序的状态不同地处理异常。这段代码太复杂了,对于一个非常重要的应用程序来说很难理解。更好的方法是保留functionHandlesEx并将异常恢复逻辑放在处理函数中。
public void functionHandlesEx() {
try {
//logic here;
}
}
catch (Exception e) {
if(iWantToHandleException) {
//handle exception
}
//do nothing otherwise. Use the finally block for anything else they have in common.
}
}
这个更容易理解,将它重构为这种形式应该不会太难。