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
  }
}

「最後に」ブロックに「戻る」命令を入れることができますが、これにより潜在的な例外が無効になります。このままでは「戻る」には到底届かない。

私が遭遇した問題をあなたが見つけたと思います。必要なすべてのメッセージを取得し、これらのメッセージを含む配列を返し、サーバーへの接続を繊細な (「ベスト プラクティス」でも) 方法で閉じるにはどうすればよいですか?

前もって感謝します。

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 に答える