2010-02-03 3 views
18

생성자가 처리 할 수없는 생성자의 메서드에서 예외가 발생하면 응용 프로그램에서 처리 할 수없고 해당 없음을 알 수없는 경우 해당 예외를 catch하고 런타임 예외로 다시 throw 할 수 있습니다. 건설중인 물건?생성자가 런타임 예외를 발생시키는 것은 괜찮습니까?

+6

예, 생성자로부터 예외를 던지는 것은 객체 생성을 중단하는 표준 방법입니다. –

+0

+1 - 새로운 사람들을위한 좋은 질문입니다 OOP – JonH

답변

11

예,이 이미 체크되지 않은 예외를 throw 할 가능성이 항상 있기 때문에 그들이 다른 방법을 호출 할 때 어쨌든 많은 생성자 불가피하다.

+0

이것은 좋은 지적입니다. – insipid

4

예 당신의 생성자에서 예외를 던질 completly 유효합니다. 당신은 다른 선택의 여지가 없으며, 특히 객체를 만들고 단순히 객체를 만들려고 시도하는 경우에만 은 올바르게 작동하지 않습니다..

+0

설명을 위해 확인되지 않은 예외로 변환하는 것이 좋습니다. 아니면 throws 절을 추가하는 것입니까? – insipid

+4

자주 나는 그것을 설명하는 문자열과 함께'IllegalArgumentException'을 던질 것입니다. – philfreo

1

예. 예외 처리 방법을 알지 못한다면 예외를 삼키고 스택 추적을 인쇄하는 것보다 (또는 더 나쁜 것은 절대 수행하지 말고) 던지는 것이 좋습니다.

이 나중에 몇 가지 매우 어려운 디버그 오류를 방지하는 데 도움이됩니다.

11

예. 이것은 표준 관행입니다. 이 Effective Java, 2nd Ed.에서

는 "추상화 적절한 예외를 발생"부품 (61)에 의해 덮여있다. 결과 예외가 점검되는지 또는 선택 취소되는지는 항목 58, "프로 그래 V 오류에 대한 복구 가능한 조건 W 런타임 예외에 대해 확 인 된 예외 사용"의 Effective Java에서도 포함됩니다. 이 오히려 정상적인 방법보다 생성자이라고

정말 문제가되지 않습니다. (실제로 생성자는 슈퍼 인터페이스에 묶여 있지 않기 때문에 더 많은 자유를 누릴 수 있습니다.)

또 다른 예외의 결과로 예외를 던지면 cause을 새로운 것으로 설정하는 것이 좋습니다. 예외.

+1

좋은 소스에 대한 +1 – insipid

+1

참조하는 모든 답변 효과적인 Java의 가치 +1 : – Fredrik

2

으로 설정하면 개체 구성이 실패했음을 나타낼 수 있습니다. Chris Jester-Young이 이미 주석을 달았습니다. 을 사용하지 않으려면 예외를 해제하는 것이 좋습니다. 예외를 잡아서 처리하도록 권하는 컴파일러의 잔소리를 느낄 것입니다. 확실히 할 수 있습니다.

+0

왜 당신이 원합니까? 더 자주 당신이 그것을 처리하고 싶지 않아, 그것의 오류, 그것은 로거/작업 처리기에 스택을 실행하자. – reto

1

는 개인적으로 나는 (doppeldish 이미 지적) 생성자가 체크 된 예외를 던져보고 싶지. 그럼에도 불구하고 응용 프로그램이 예외를 처리 할 수 ​​없다는 것을 어떻게 확신 할 수 있습니까? 응용 프로그램이 그것을 처리 할 수없는 경우에도 사용자가 단순히 다시 시도하여 할 수 있습니까?

+0

+1 할 항목 : P 고마워요. – insipid

관련 문제