2010-03-18 5 views
16

저는 enum을 매개 변수로 사용하고 해당 매개 변수에 따라 일부 정보를 반환하는 메서드가 있습니다. 그러나 해당 열거 형에는 처리하면 안되는 일부 값이 들어 있으며 오류 조건이 발생해야합니다. 현재이 메서드는 IllegalArgumentException을 throw하지만 호출자가 예외를 catch하고 정상적으로 반환하고 오류를 로깅하도록이 예외를 확인하고 싶습니다. 거기에 뭔가 적합한 또는 내 자신의 예외 서브 클래스를 만들어야합니까?IllegalArgumentException에 해당하는 항목을 선택 했습니까?

다른 패턴도 열려 있습니다. 합리적인 반응은 열거 형의 모든 값을 처리해야하지만 그렇지 않은 경우입니다. enum에 새로운 값이 추가되면,이 메소드가 올바른 일을하는지 확인하고 싶습니다.이 경우, 인간에게 경고하는 것은 기본 반환 값을 사용하는 것이 더 낫습니다.

어떤 조언을 주셔서 감사합니다.

답변

3

질문은 다음과 같습니다

방법이 적합하지 않은 열거 매개 변수를 사용하여 호출 할 때 경우가 얼마나 "정상적인"
  • ?
  • 이러한 사례를 정상적으로 처리하고 처리를 계속할 수 있습니까?

설명에서 알 수 있듯이 새로운 열거 형 값이 추가되고 메소드가 올바르게 업데이트되지 않은 경우 (즉, 버그가 도입 된 경우에만 발생)는 "정상"이 아닙니다. 그래서 나에게 이것은 RuntimeException (예를 들면 체크되지 않은)에 대한 경우처럼 들린다. 이 메소드의 호출 측은, 필요에 따라서 미확인 예외를 캐치 할 수 있습니다 만, 강제되어 있지 않습니다.

OTOH 귀하의 메서드가 바로 열거 형 내부로 반환되는 데이터를 이동하여 설명하는 경우를 제거하려고합니다. 새로운 enum 값이 추가 될 때마다 이렇게하면 관련 데이터를 잊어 버릴 방법이 없습니다.

관심이 있으시면 this tutorial을 확인하시기 바랍니다.

4

사용자가 직접 확인한 예외 (예 : UnhandledEnumType)를 만들거나, IllegalArgumentException을 잡아서 처리 할 수 ​​있습니다. 열거 형의 일부 값만 처리해야한다는 약간의 어지러운 것처럼 들립니다. 열거 형의 목적 중 하나는 특정 값 집합에 값을 바인딩하는 것이며 모든 처리를 기대합니다. 새로운 메소드가 추가되는 것에 대해 걱정이된다면, 모든 값이 올바르게 처리되었는지 테스트해야합니다 (enum의 values ​​() 메소드를 사용하여 모든 값이 제대로 테스트되었는지 확인하십시오).

+1

질문이 표시됩니다. (enum인지 아닌지에 관계없이) 불법 인수를 강제로 처리하는 방법에 관한 것입니다. 당신은'IllegalArgumentException'처럼 _unchecked_ 예외를 잡거나 선언 할 필요가 없습니다. 이 대답은 컴파일러에서 시행 할 기존 _checked_ 예외를 작성하거나 다시 사용함을 나타냅니다. 이것이 대부분 사람들이 접근하는 방식입니다. –

0

어떻게 InstantiationException이 발생합니까? 애플리케이션이, Class 클래스의 newInstance 메소드를 사용해 클래스의 인스턴스를 생성하려고했지만, 지정된 클래스 객체를 인스턴스화 할 수없는 경우에 Throw됩니다. 클래스 인스턴스가 abstract 클래스, 인터페이스, 배열 클래스, 원시 형, 또는 void를 나타내는 경우는 입니다. 클래스에 무효 생성자가없는 경우

관련 문제