2011-03-09 13 views
8

어떤 유형의 객체를 만들어야합니다. 개체 클래스에는 하나의 생성자 만 있습니다 (작성한 하나의 생성자).생성자의 실행을 멈출 수 있습니까?

내 프로그램은 매개 변수 ID를 사용하여 개체의 인스턴스를 만드는 요청을받습니다. ID 매개 변수에 숫자가 아닌 char이 포함되어 있으면 생성자를 중지하려고합니다.

나는 생성자를 호출 한 사람이 아니기 때문에 매개 변수를 확인할 수 없습니다.

답변

4

이 문제를 해결하는 방법은 불법 문자가 주어질 때 어떤 일이 일어나기를 원하는지에 달려 있습니다. 불법 문자가 주어질 때 어떤 일이 일어나기를 원하는지, 그리고 우리가 말하는 객체와 소비하는 라이브러리가 어떻게 사용하고 있는지에 따라 달라집니다.

가장 합리적인 일은 IllegalArgumentException을 던집니다. 이것이 내가하는 것이 좋습니다.

그러나이 방법을 사용하는 것이 좋습니다 (생성자에서 직접이 작업을 수행 할 수는 없지만이 작업을 수행하는 팩토리 메서드를 만들 수 있음). return null도 사용할 수 있습니다.

+6

'return null'? – biziclop

+0

이것은 : 2 개의 클래스가 있다고합시다. 클래스 Contact에서 파생 된 클래스 VIPcontact입니다. VIPcontact 클래스의 생성자는 Contact 생성자를 호출합니다. it (Contact 생성자)는 매개 변수가 유효한지 확인합니다. – SapG

+1

컨스트럭터 반환 유형이 무효이므로 "null을 반환 할 수 없습니다." – Loda

6

생성자를 "중지"시키는 유일한 방법은 예외를 throw하는 것입니다. 물론 호출자는이 예외에 대해 "알고"있어야하며 생성자가 실패한 경우를 처리 할 수 ​​있어야합니다.

생성자에서 예외를 throw해도 개체 생성이 중단되지 않습니다.을 만들지 않으면 변수 참조가 할당되지 않고 참조가 사용 불가능 (따라서 가비지 수집 대상) 이됩니다. this을 생성자 자체에서 외부 메서드로 전달하는 실수. (어쨌든해서는 안되는)

19

생성자를 비공개로 만들고 매개 변수가 유효하면 객체의 새 인스턴스의 유효성을 검사하고 반환하는 정적 팩토리 메소드를 노출합니다.

+1

+1 실제로 발신자 코드를 변경할 수 있다면 이상적인 해결책입니다. – biziclop

관련 문제