Java - 我可以使用空的catch语句吗?

时间:2015-09-08 17:25:25

标签: java exception try-catch

我正在开发一个基本的Java命令行电子邮件客户端应用程序。我提供的连接器将向我发送电子邮件,但是如果我发送"我自己创建此电子邮件时,它不会位于连接器上的电子邮件。现在,当我想要删除电子邮件时,我可以找到我所在的文件夹并通过其ID删除它。我还想将它从连接器中删除,如果它位于连接器内部,这样当我刷新电子邮件时我就不会再收到这封电子邮件了。

public boolean delete(int messageId) throws IndexOutOfBoundsException
{
if (folders.get(getActiveFolderName()).delete(messageId))
{
    if (connector.retrMessage(messageId) != null)
    {
    connector.markMessageForDeleting(messageId); 
    //throws exception if not found on connector
    }
    return true;
}
return false;
}

我试过这个,这是处理异常的一种非常糟糕的方式吗?:

public boolean delete(int messageId)
{
if (folders.get(getActiveFolderName()).delete(messageId))
{
    try{
    connector.markMessageForDeleting(messageId);
    } catch (IndexOutOfBoundsException e)
    {
  //this successfully soaks up the exception if its not located in connector
    }
    return true;
}
return false;
}

由于

4 个答案:

答案 0 :(得分:4)

虽然它们被认为是坏的,但只要你知道发生了什么并采取必要措施从程序的异常行为中恢复,它就会没问题。

我只是建议你至少提一个日志声明。

答案 1 :(得分:0)

我个人不这么认为。您正在使用异常作为特定结果的指示符。当你抓住它时,你不会试图隐藏代码中的一些错误。但是,我不确定您是否有能力更改此连接器的任何内容,但如果是这样,您应该对其进行调整,以便它首先不会抛出这样的错误。

答案 2 :(得分:0)

您正在做的事情被称为异常吞咽。它通常被认为是不好的做法。风险是吞下电子邮件位于连接器中时可能发生的异常。你不想要那个。

您已经知道有一个IndexOutOfBoundsException的原因,那么为什么不首先测试您的电子邮件是否位于连接器中?

答案 3 :(得分:0)

记录任何异常&然后在像你这样的情况下可以忽略。

P.S。:在您的情况下,无需使用堆栈跟踪来填充日志。它可以是一个简单的错误消息,指示可以安全地忽略该异常。