빠른 Java 질문 : 주어진 수업 만 인스턴스화합니까?
-
03-07-2019 - |
문제
내 문제는 다음과 같습니다. 주어진 수업이 다른 클래스를 인스턴스화 할 수있는 방법이 필요합니다. 나는 다른 사람을 중첩 된 내부 수업이나 그런 바보로 만들고 싶지 않습니다. 어떻게해야합니까? 나는 잊어 버린다.
해결책
생성자를 비공개로 만드십시오. 액세스가 허용되는 클래스의 인스턴스를 취하는 정적 공장 메소드를 만듭니다. 공장 방법에 적합한 객체를 만들고 생성 된 객체에 액세스 할 수있는 객체의 세트 토를 사용하여 해당 클래스에 생성 된 사본을 제공하십시오.
public class AllowedAccess
{
private SecureClass secure;
public setSecureClass( SecureClass secure )
{
this.secure = secure;
}
...
}
public class SecureClass
{
private SecureClass() {}
public static void Create( AllowedAccess allowed )
{
allowed.setSecureClass( new SecureClass() );
}
...
}
BTW, 나는이 디자인을 의심합니다. 나에게 너무 크게 결합 된 것 같습니다.
다른 팁
개인 정적 내부 클래스는 정확히 당신이 원하는 것입니다. 그것에 대해 멍청한 것은 없습니다.
public class Creator {
private static class Created {
}
}
그렇지 않으면 패키지 레벨에서만 인스턴스화를 보호 할 수 있습니다.
public class Created {
Created() {
}
}
동일한 패키지의 클래스 만 생성자에 대한 액세스를 제공합니다.
Instantiation 패키지로부터 보호 될 수업을 비공개로 만들 수 있습니다.
제휴하지 않습니다 StackOverflow