스택 트레이스를 잃지 않고 Java에서 예외 재투입
C# 에서는,throw;
스택 트레이스를 유지하면서 예외를 재투입하려면 다음 명령을 사용합니다.
try
{
...
}
catch (Exception e)
{
if (e is FooException)
throw;
}
Java에는 이와 같은 것이 있습니까(원래 스택트레이스를 잃지 않는 것).
catch (WhateverException e) {
throw e;
}
검출한 예외를 다시 던지기만 하면 됩니다(주변 메서드는 서명 등을 통해 이를 허용해야 합니다).이 예외는 원래 스택트레이스를 유지합니다
다음을 원합니다.
try
{
...
}
catch (FooException fe){
throw fe;
}
catch (Exception e)
{
// Note: don't catch all exceptions like this unless you know what you
// are doing.
...
}
Exception as throwable을 원인 파라미터로 입력하여 예외를 다른 스택트레이스로 랩하고 원래 스택트레이스를 유지할 수도 있습니다.
try
{
...
}
catch (Exception e)
{
throw new YourOwnException(e);
}
Java도 거의 비슷합니다.
try
{
...
}
catch (Exception e)
{
if (e instanceof FooException)
throw e;
}
Java에서는 잡은 예외를 무시하기만 하면 되기 때문에throw e
뿐만 아니라throw
. Java는 스택트레이스를 유지합니다
이와 같은 것
try
{
...
}
catch (FooException e)
{
throw e;
}
catch (Exception e)
{
...
}
public int read(byte[] a) throws IOException {
try {
return in.read(a);
} catch (final Throwable t) {
/* can do something here, like in=null; */
throw t;
}
}
이 예는 메서드에 의해 전송되는 구체적인 예시입니다.IOException
.그final
수단t
try block에서 던져진 예외만 유지할 수 있습니다.추가 독서 자료는 이곳저곳에서 찾을 수 있다.
스택 트레이스는 캐치된 extection을 다른 예외로 랩(자세한 정보를 제공하기 위해)하거나 캐치된 extection을 재투입하기만 하면 제공됩니다.
try{ ... }catch (FooException e){ throw new BarException("Some usefull info", e); }
저는 비슷한 상황을 겪고 있었습니다. 제 코드는 제가 다시 던지고 싶었던 많은 다른 예외를 잠재적으로 발생시킵니다.위에서 설명한 솔루션은 나에게 효과가 없었다. 왜냐하면 이클립스는 나에게 다음과 같이 말했다.throw e;
처리되지 않은 예외로 이어지기 때문에 이렇게 했습니다.
try
{
...
} catch (NoSuchMethodException | SecurityException | IllegalAccessException e) {
throw new RuntimeException(e.getClass().getName() + ": " + e.getMessage() + "\n" + e.getStackTrace().toString());
}
내게는 효과가 있었다...:)
언급URL : https://stackoverflow.com/questions/1097527/rethrowing-exceptions-in-java-without-losing-the-stack-trace
'sourcecode' 카테고리의 다른 글
서버 데이터에서 Vue2 라우터 링크 (0) | 2022.07.31 |
---|---|
이.$set()은 larabel을 사용하는 vue2.0에서 작동하지 않습니다. (0) | 2022.07.31 |
한 Vuejs 구성 요소에서 다른 구성 요소로 OAuth 토큰 전달 (0) | 2022.07.31 |
오래된 데스크톱 컴퓨터에 소형 운영체제를 구축하려면 어떻게 해야 하나요? (0) | 2022.07.31 |
"Java Date Format is not threadsafe" (자바 날짜 포맷은 스레드 세이프가 아닙니다)는 어떤 결과를 초래합니까? (0) | 2022.07.31 |