我正在开发一个基本的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;
}
由于
答案 0 :(得分:4)
虽然它们被认为是坏的,但只要你知道发生了什么并采取必要措施从程序的异常行为中恢复,它就会没问题。
我只是建议你至少提一个日志声明。
答案 1 :(得分:0)
我个人不这么认为。您正在使用异常作为特定结果的指示符。当你抓住它时,你不会试图隐藏代码中的一些错误。但是,我不确定您是否有能力更改此连接器的任何内容,但如果是这样,您应该对其进行调整,以便它首先不会抛出这样的错误。
答案 2 :(得分:0)
您正在做的事情被称为异常吞咽。它通常被认为是不好的做法。风险是吞下电子邮件位于连接器中时可能发生的异常。你不想要那个。
您已经知道有一个IndexOutOfBoundsException的原因,那么为什么不首先测试您的电子邮件是否位于连接器中?
答案 3 :(得分:0)
记录任何异常&然后在像你这样的情况下可以忽略。
P.S。:在您的情况下,无需使用堆栈跟踪来填充日志。它可以是一个简单的错误消息,指示可以安全地忽略该异常。