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() throws SQLException'을 만드는 것이 더 쉽다고 생각합니다. 그러면 호출 클래스가 오류.

관련 문제