Java 这种异常处理方法有什么问题吗?
我们需要有两个功能。它们做同样的事情,但一个处理异常,另一个抛出异常。注意:如果要处理异常,则必须在下面的commonFunc中处理异常。处理FunctionHandleEx中的异常不起作用,因为要处理该函数,它需要仅在commonFunc中可用的变量。为了重用代码,我们得到了以下结果。你看到它有什么问题吗?我可以看到一个问题是:当IsExceptionHandle为true时,函数抛出异常,但实际上没有抛出异常——但Java允许这样做?有更好的方法吗?我们使用的是Java6。谢谢Java 这种异常处理方法有什么问题吗?,java,exception,Java,Exception,我们需要有两个功能。它们做同样的事情,但一个处理异常,另一个抛出异常。注意:如果要处理异常,则必须在下面的commonFunc中处理异常。处理FunctionHandleEx中的异常不起作用,因为要处理该函数,它需要仅在commonFunc中可用的变量。为了重用代码,我们得到了以下结果。你看到它有什么问题吗?我可以看到一个问题是:当IsExceptionHandle为true时,函数抛出异常,但实际上没有抛出异常——但Java允许这样做?有更好的方法吗?我们使用的是Java6。谢谢 public
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;
}
}
}
这似乎是一种处理异常的过于复杂的方法。我理解它的玩具代码来显示您正在做什么,但我还没有遇到很多创建嵌套调用以处理异常的原因
理想情况下,可能导致异常的代码应该具有处理异常的方法,使用try…catch,甚至可能是finally。这个逻辑流在一个非平凡的应用程序中看起来相当复杂,并且会增加调试的复杂性和难度。您应该去掉这两个函数,并避免嵌套try/catch块。如果必须嵌套它们,则通过保持相同方法中的逻辑,使其尽可能具有straigtfoward 根据代码,我猜您希望根据程序的状态以不同的方式处理异常。这段代码太复杂,对于一个非平凡的应用程序来说很难理解。更好的方法是保留FunctionHandleEx,并将异常恢复逻辑放在处理程序函数中
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.
}
}
这更容易理解,并且将其重构为这种形式应该不会太难。如果没有真正的异常,IsExceptionHandle是真是假都不重要,它不会被调用。它看起来有效。我假设FunctionHandleEx中的try/catch是一种形式,以防止编译器抱怨未处理或抛出的异常。谢谢你,古德先生!真正的处理是在commonFunc中完成的。你需要两个不同的外部函数,这样FunctionHandleEx就不需要throws子句了。我想不出任何方法来简化它。在Java中,重新触发异常应该可以正常工作。在其他一些环境中,情况并非如此。OP解释说,为了访问内部数据,需要在commonFunc内部处理该函数。请注意,需要两个单独的外部函数,以便一个函数可以有一个throws子句,另一个函数不能有。