2012-04-19 2 views
1

メールサーバーに接続してすべてのメッセージを取得し、これらのメッセージを配列に返すメソッドがあります。 これは、この(擬似コード)のようになります。値を返すメソッドで "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 
    } 
} 

私は「最終的に」ブロックが、これを無効に可能性のある例外に「復帰」命令を置くことができます。 今のままにしておくと、「返品」には至りません。

あなたは私が走った問題を捉えたと思います。どのように私は必要なすべてのメッセージを得ることができますか、これらのメッセージと配列を返すと繊細な( "ベストプラクティス"でも)方法でサーバーへの接続を閉じますか?

ありがとうございます。

+2

return文にはなぜ届かないのですか?例外がない場合、Message []が正常に返されます。 – Pablo

+1

'try'の終了後に' return Message [] 'コールをしないのはなぜですか?メソッドの途中でリターンを埋め込むのではなく、そうした方がはっきりしているはずです。 –

+2

ここに問題が何であるかは本当に分かりません。今のようになぜ「帰ってこない」に達するのだろうか?どうか明らかにしてください。 –

答えて

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; 
} 
+0

最後にブロックは実行されますか? ああ、ありがとう、私はそのような解決策に近づいていた:) – Dragon

-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; 
    } 
} 
+0

メッセージはオブジェクトではないデータ型です! – giorashc

+1

finallyブロックの "return"は、そのような場合に例外を消費します。 – Dragon

0

(私が見てきたことを) '標準' バージョンはノー参照

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

ですあなたのコードではうまくいかない理由。

あなたのコードが「データを返す」ものであれば、一般に「パブリックメッセージ[] getStuff()throw SQLException」とする方が簡単だと思います。エラー。

関連する問題