2014-01-20 2 views
1

예외가 발생하는 타사 라이브러리를 사용하고 있습니다. 유형이 RETCODE_ERROR 인 클래스입니다. 이것은 계층 구조의 선택입니다. 클래스가 Throwable을 구현하는 경우 패턴이 스칼라의 모든 하위 클래스와 일치합니다.

Return Code Class hierarchy

나는 슈퍼 클래스 RETCODE_ERROR에 대해 패턴 일치하고자, 확인되는 것은 아닙니다.

try { 
    // perform action here 
} catch { 
    case e.asInstanceOf[RETCODE_ERROR] => // handle exception 
} 

더 좋은 방법이 있습니까?

+6

'케이스 E : RETCODE_ERROR => ... .' – Jesper

+2

'Throwable'을 구현하지 않으면 던지거나 잡을 수 없습니다. 'RETCODE '(즉, "return code")라는 이름으로 판단하면 반환되지 않을 수 있습니다. _not_ throw 될 수 있습니다.이 경우 코드가 작동하지 않습니다. –

답변

6

모든 명성은 실제로 @Jesper로 이동해야합니다

try { 
    // perform action here 
} catch { 
    case e: RETCODE_ERROR => // handle exception 
} 

당신이 클래스의 일부 일부에 대해 일치 할 경우 친절을 열거 할 수 있습니다 :

try { 
    // perform action here 
} catch { 
    case e: (RETCODE_NO_DATA | RETCODE_ALREADY_DELETED) => // handle exception 
} 
0

를 asInstanceOf를 사용하지 않는 것이 좋습니다 . 게다가,이 코드는 옳지 않습니다.

경우 e.asInstanceOf [RETCODE_ERROR] => // 핸들 예외

대신이 같은 패턴 매칭을 사용할 수

try { 
    // do something 
} catch { 
    case e: RETCODE_ERROR => // handle it 
} 
+0

나는 asInstanceOf와 isInstanceOf를 혼동했을 것이다. –

관련 문제