2013-08-14 6 views
3

실세계 객체를 나타내는 객체를 반환하려는 라이브러리에서 작업하고 있습니다. 이 클래스를 개발자에게 공개하여 실제 객체를 조작하고 싶지만 객체를 직접 만들지 못하게하고 싶습니다.패키지 개인 생성자를 사용하여 클래스를 만드는 방법은 무엇입니까?

public class World { 
    public static List<RealObject> getAllObjects() { 
     // How to create RealObject with physicalID? 
    } 
} 

public class RealObject { 
    private int physicalID; 

    public RealObject(int physicalID) { 
     // Undesirable, user has no knowledge of IDs 
    } 

    public void setState(int state) { 
     // Code using physicalID to change state 
    } 
} 

이러한 개체는 현재 생성자가없고 내 라이브러리 내에서 리플렉션과 함께 설정 개인 id 필드가 있습니다. 이것은 완벽하게 작동하지만 더 나은 해결책이 있어야한다고 생각합니다. 아마도 내 상황에서 유용한 제한은 다른 하나의 클래스에서이 객체를 구성하기 만하면된다는 것입니다.

더 좋은 솔루션이 있습니까? 그리고 그 경우 조직적인 목적으로 별도의 파일에 클래스를 가질 수 있습니까?

+0

몇 가지 예제 코드를 추가하십시오. –

+0

공장 패턴 사용 http://en.wikipedia.org/wiki/Factory_method_pattern – user902383

+0

@ user902383 어떻게 문제를 해결할 수 있습니까? 여전히 사용자에게 공개 된 팩토리 메소드입니다. – Overv

답변

3

생성자 또는 다른 방법에 대한 기본 액세스 수준을 지정하면 동일한 패키지의 클래스에서만 액세스 할 수 있습니다.

구체적으로 제목에 질문에 대답하려면 :

public class RealObject { 
    RealObject(int physicalID) { 
    // Package-private constructor 
    } 
} 
관련 문제