오류가 발생하면 트리거 할 코드가 필요합니다. 기본적으로 예외의 경우에만 실행되는 finally
블록이 필요합니다.Java에서 오류 케이스에 대해 'finally'를 구현하는 방법
HttpURLConnection post(URL url, byte[] body) throws IOException {
HttpURLConnection connection = url.openConnection();
try {
OutputStream out = connection.getOutputStream();
try {
out.write(body);
} finally {
out.close();
}
return connection;
} catch (Throwable t) {
connection.disconnect();
throw t;
}
}
미세 제외 보이는이 컴파일되지 않습니다 : 내 기능은 Throwable
을 던질 수 없습니다 나는이 방법을 구현하는 것입니다.
내가 쓰기 다시 수 :
} catch (RuntimeException e) {
connection.disconnect();
throw e;
} catch (IOException e) {
connection.disconnect();
throw e;
}
하지만 그렇다하더라도 난 A) 모든 오류 누락와 b)이 코드를 내가 예외의 다른 유형을 던져 내 구현을 변경할 때 시간을 수정해야합니다.
일반적으로이 문제를 해결할 수 있습니까?
예외는 확인되지 않았습니다. * 환상적입니까? * – cdhowie
@cdhowie : 나는 또한 예외 검사를 싫어하지만 실제로 이것은 오류 및 Throwable이 검사되지만 검사되지는 않습니다. 런타임의 아무 것도 "throw XxxError"를 선언하지 않지만 갑자기 XxxError를 던지려고하면 HUH가 표시됩니까? 그게 뭐야? 체크 된 예외는 Throwable의 추상 서브 클래스 인 CheckedException으로 수행되어야합니다.이 서브 클래스는 현재 "마법"이 아닌 컴파일러에 의해 검사됩니다. 물론 체크 예외를 Throwable로 다시 발생시킬 수는 있지만, 그렇게 확신 할 수는 없습니다. 나쁜 것. –
@ Software Monkey : 실제로'Error'는 체크되지 않습니다. 방금 체크했습니다. :)'throws' 절에서 언급하지 않고'Error'를 잡아서 다시 던질 수 있습니다.그것은 내 솔루션에 또 다른 경우를 추가 할 것이기 때문에 유지 보수가 훨씬 쉽지 않습니다. 현실은'CheckedException' 대신에 Java가'RuntimeException'과'Error'라는 두 개의 확인되지 않은 나무를 가지고 있습니다. 다른 모든 것들은 검사됩니다. – SnakE