여기 내 샘플 추상적 인 싱글 톤 클래스입니다 :Java로 추상 싱글 톤 클래스를 구현하려면 어떻게해야합니까?
public abstract class A {
protected static A instance;
public static A getInstance() {
return instance;
}
//...rest of my abstract methods...
}
그리고 여기에 구체적인 구현 :
public class B extends A {
private B() { }
static {
instance = new B();
}
//...implementations of my abstract methods...
}
불행하게도 나는 실행 클래스 B의 정적 코드를 얻을 수 없기 때문에 인스턴스 변수 절대로 설정되지 않습니다. 나는 이것을 시도 :
Class c = B.class;
A.getInstance() - returns null;
이
ClassLoader.getSystemClassLoader().loadClass("B");
A.getInstance() - return null;
모두 실행 정적 코드가 실행되지 없구요 이클립스 디버거에서이. 정적 코드가 실행되도록하는 유일한 방법은 B의 생성자에 대한 액세스 가능성을 public으로 변경하고 호출하는 것입니다.
나는이 테스트를 실행하기 위해 Ubuntu 32bit에서 sun-java6-jre를 사용하고 있습니다.
싱글 톤에서 개인 생성자의 목적은 다른 누군가가 그것을 인스턴스화하는 것을 방지하기위한 것입니다. 여기에서이 작업을 수행했습니다. 추상 클래스를 인스턴스화 할 수 없으며 하위 클래스에는 전용 생성자가 있습니다. – Simon
하위 클래스를 추상 전용으로 설정하고 전용 생성자 만 사용해야합니다. – BalusC
싱글 톤은 개인 생성자를 필요로하지 않습니다 (공용 생성자를 사용하여이 질문에 대한 해결책을 보려면 내 대답을 참조하십시오). – ryvantage