2011-12-22 4 views
0

를이 내 시나리오, 서로 다른 계층에서 같은 임의의 예외를 포함의 나는 예외 목록을 가지고 있고, 노호 코드 스냅 내가 어떻게 비교할 수 있습니다, 그래서비교 예외

private List<java.lang.Class> connectionExceptions; 
try { 

// trying to connect to external module; 

} catch(Exception e) { 
    // Need to compare this exception e with a list of exceptions which I have, 
    // and the action depends on the results. There may be some other exception 
    // which are not in the list. 
} 

을해야 할 일을 설명 할 것 예외가 목록에 있거나 일부 다른 예외가있는 경우 어떤 종류의 작업이 필요합니다. ...

저는 제어 흐름이 예외적 인 것은 좋지 않음을 알고 있습니다. 그러나, 나는 그것을 할 필요가있다.

+0

왜 'List '을 사용할 수 없습니까? – KrishPrabakar

답변

2

각각 특정 예외 만 잡아서 여러 개의 catch 블록을 가질 수 있습니다.

... 
catch(SomeException e) { 
    //do something 
} 
catch(SomeOtherException e) { 
    //do something else 
} 

또는 실제로 예외가 목록에 있는지 확인하려면 connectionExceptions.contains(e.getClass())을 사용하십시오.

+0

다른 계층의 예외 목록이있는 경우 어떻게됩니까? –

+0

그게 무슨 뜻이야? – tobiasbayer

1
if (connectionExceptions.contains(e) { 
    // 
} 

목록이 동적이어야하는 경우입니다. 그렇지 않으면 사용

} catch (FooException) { 

} catch (BarException) { 

} 

또는 Java7에서 멀티 캐치 :

} catch (FirstException | SecondException ex) { 
+0

죄송합니다. 예. 고정. 나는 그것이 실제로'클래스'가 될 것이라고 기대한다. 더 의미가있다. – Bozho

+0

@ Bosho : 나는 제안을 해주셔서 감사합니다. –

+0

'Exception'에는 오버라이드 된'equals()'메소드가 없으므로 ID 비교 ('==')를 사용하는 수퍼 클래스'Object'의 equals를 사용하게됩니다. – KrishPrabakar

-1

Abimaran를, 당신의 질문은 "(try 블록에 던져) 예외 목록 여부에 있는지 여부를 확인"입니다. 그래서이를 확인하기 위해, 메커니즘을 확인하는 것은 매우 정직하고 있거나 상세한, 내 말은,

  • 목록,지도 나 세부 사항 (같은 경우 포스 담즙, 유형, 클래스 등의 각 예외의 일을 유지한다 예외 클래스의 예외를 확인하려면 Java 범용 클래스에서 제공하는 함수 중 일부만 사용하십시오.

이 시나리오에서 가장 좋은 방법입니다.

2

Exception 클래스 같음을 사용하기 때문에() Object 클래스 기능 connectionExceptions.contains(e) 다른 기본 HEX ID를 가질 것 같은 원인 스택 트레이스 담지 각 예외 전자 인스턴스와 정답을 생성하지 않을 것이다. 그러나 두 가지 예외를 비교하려면 Arrays.deepEquals(Object, Object)을 사용할 수 있습니다.

catch (Exception e) { 
    boolean sameException = false; 
    for (Exception ee : connectionExceptions) { 
    sameException = Arrays.deepEquals(e.getStackTrace(), ee.getStackTrace()); 
    if (sameException) { 
     break; //exception matched 
    } 
    } 
} 
+0

'Arrays.deepEquals()'가'Arrays '보다 선호되는 이유를 설명해주십시오.equals()' – coolguy

0

Peter Knego는 answer에서 예외를 비교하는 방법을 설명합니다.

기본적으로 instanceof을 사용하여 비교할 수 있습니다.

for (java.lang.Class exception : connectionExceptions) { 
    if (e instanceof exception) { 
     // DO YOUR THING 
     break; 
    } 
}