2009-09-25 3 views
1

:IllegalArgumentException (JDK 1.4.2)을 throw 가능 원인으로 생성 할 수없는 이유는 무엇입니까? java.beans.PropertyEditorSupport에 확장하는 클래스에서

/** 
* Sets the property value by parsing a given String. May raise 
* java.lang.IllegalArgumentException if either the String is 
* badly formatted or if this kind of property can't be expressed 
* as text. 
* 
* @param text The string to be parsed. 
*/ 
public void setAsText(String name) { 
    try { 
     asEnum(name); 
    } catch (InvalidEnumNameException e) { 
     throw new IllegalArgumentException("Unable to convert value: "+ name); 
    } 
} 

는 실제 스택 트레이스가 손실 될 수 원인이됩니다.

답변

2

는 IllegalArgumentException Throwablecause 매개 변수를 사용 does have constructors - 그 코드는 단순히를 사용하지 않는,

+0

예 실제로 실제로 1.4.2에 걸렸습니다 ... –

+0

그럴 경우 행운을 빕니다. 원인 매개 변수가 대부분 (모두?)에 없었습니다. 1.5 이전의 예외 –

0

이상한 누락 것 같습니다. 일반적으로 다음과 같이 사용됩니다 :

if (value == null) { 
    throw new IllegalArgumentException("Value can't be null"); 
} 

그러나 위에서 설명한 것처럼 예외를 취하는 것이 유용한 경우가 있습니다. Java를 만드는 그러한 단점들 중 하나 재미. 위의 경우 예외 메시지를 추출합니다. 문맥은 분명해야합니다.

0

이전에 자바 5에 도입 된 규칙, "예외가 Throwablecause이"보다 나이가 가능하기 때문에 Java SE 5에서는, IllegalArgumentException가 Throwable 원인을 받아들이지 않았습니다. 자바 SE 5 이상에서는 그렇습니다.

1

사용 initCause :

try { 
    throw new IOException(); 
} catch (IOException e) { 
    IllegalStateException ise = new IllegalStateException(); 
    ise.initCause(e); 
    throw ise; 
} 

쾌적하지,하지만 일을 할 것입니다.

관련 문제