1

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

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”块中,但这会禁用潜在的异常。如果我保持现在的状态,永远无法达到“返回”。

我想你抓住了我遇到的问题。我怎样才能得到我需要的所有消息,返回一个包含这些消息的数组,并以一种微妙的方式(甚至是“最佳实践”)关闭与服务器的连接?

先感谢您。

4

3 回答 3

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;
}
于 2012-04-19T18:56:40.733 回答
0

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

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

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

作为旁注,如果您的代码是“返回数据”的东西,我通常认为将其设置为“public Message[] getStuff() throws SQLException”更容易,然后让调用类处理错误。

于 2012-04-19T18:59:28.527 回答
-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;
  }
}
于 2012-04-19T18:56:58.787 回答