어떤 유형의 객체를 만들어야합니다. 개체 클래스에는 하나의 생성자 만 있습니다 (작성한 하나의 생성자).생성자의 실행을 멈출 수 있습니까?
내 프로그램은 매개 변수 ID를 사용하여 개체의 인스턴스를 만드는 요청을받습니다. ID 매개 변수에 숫자가 아닌 char이 포함되어 있으면 생성자를 중지하려고합니다.
나는 생성자를 호출 한 사람이 아니기 때문에 매개 변수를 확인할 수 없습니다.
어떤 유형의 객체를 만들어야합니다. 개체 클래스에는 하나의 생성자 만 있습니다 (작성한 하나의 생성자).생성자의 실행을 멈출 수 있습니까?
내 프로그램은 매개 변수 ID를 사용하여 개체의 인스턴스를 만드는 요청을받습니다. ID 매개 변수에 숫자가 아닌 char이 포함되어 있으면 생성자를 중지하려고합니다.
나는 생성자를 호출 한 사람이 아니기 때문에 매개 변수를 확인할 수 없습니다.
이 문제를 해결하는 방법은 불법 문자가 주어질 때 어떤 일이 일어나기를 원하는지에 달려 있습니다. 불법 문자가 주어질 때 어떤 일이 일어나기를 원하는지, 그리고 우리가 말하는 객체와 소비하는 라이브러리가 어떻게 사용하고 있는지에 따라 달라집니다.
가장 합리적인 일은 IllegalArgumentException
을 던집니다. 이것이 내가하는 것이 좋습니다.
그러나이 방법을 사용하는 것이 좋습니다 (생성자에서 직접이 작업을 수행 할 수는 없지만이 작업을 수행하는 팩토리 메서드를 만들 수 있음). return null
도 사용할 수 있습니다.
생성자를 "중지"시키는 유일한 방법은 예외를 throw하는 것입니다. 물론 호출자는이 예외에 대해 "알고"있어야하며 생성자가 실패한 경우를 처리 할 수 있어야합니다.
생성자에서 예외를 throw해도 개체 생성이 중단되지 않습니다.을 만들지 않으면 변수 참조가 할당되지 않고 참조가 사용 불가능 (따라서 가비지 수집 대상) 이됩니다. this
을 생성자 자체에서 외부 메서드로 전달하는 실수. (어쨌든해서는 안되는)
생성자를 비공개로 만들고 매개 변수가 유효하면 객체의 새 인스턴스의 유효성을 검사하고 반환하는 정적 팩토리 메소드를 노출합니다.
+1 실제로 발신자 코드를 변경할 수 있다면 이상적인 해결책입니다. – biziclop
'return null'? – biziclop
이것은 : 2 개의 클래스가 있다고합시다. 클래스 Contact에서 파생 된 클래스 VIPcontact입니다. VIPcontact 클래스의 생성자는 Contact 생성자를 호출합니다. it (Contact 생성자)는 매개 변수가 유효한지 확인합니다. – SapG
컨스트럭터 반환 유형이 무효이므로 "null을 반환 할 수 없습니다." – Loda