在返回值的方法中阻止“finally”

时间:2012-04-19 18:50:48

标签: java javax.mail

我有一个连接到邮件服务器的方法,获取所有消息并在Array中返回这些消息。 所以这看起来像这样(伪代码):

public Message[] getMessages() throws Exception {
  try{
      //Connection to mail server, getting all messages and putting them to an array
      return Message[];
  } finally {
      CloseConnectionToMailServer(); //I don't need it anymore, I just need messages
  }
}

我可以将“return”指令放到“finally”块中,但这会禁用潜在的Exception。 如果我现在离开它,就永远无法达到“返回”。

我认为你遇到了我遇到的问题。如何获得我需要的所有消息,返回包含这些消息的数组并以精细(甚至是“最佳实践”)的方式关闭与服务器的连接?

提前谢谢。

3 个答案:

答案 0 :(得分:3)

你的方法很好。即使你从try块返回finally块也会被执行。 并且您的方法必须返回一个值:

public Message[] getMessages() throws Exception {

  try{
      //Connection to mail server, getting all messages and putting them to an array
      return Message[];
  } finally {
      CloseConnectionToMailServer(); //I don't need it anymore, I just need messages
  }

  return null;
}

答案 1 :(得分:0)

“标准”版本(我见过)是

try {
    doStuff()
} catch (Exception e) {
    throw e;
} finally {
    closeConnections();
}
return stuff;

我认为没有理由不适用于您的代码。

作为旁注,如果你的代码是'返回数据'的东西,我通常认为更容易使它成为'public Message [] getStuff()抛出SQLException',然后让调用类处理错误

答案 2 :(得分:-2)

为什么不这样:

public Message[] getMessages() throws Exception {
  Message = null;
  try{
      //Connection to mail server, getting all messages and putting them to an array
      Message = Messages;
  } finally {
      CloseConnectionToMailServer(); //I don't need it anymore, I just need messages
      return Message;
  }
}