How can I implement an abstract singleton class in Java?
abstract-class, classloader, inheritance, java, singleton
Solution
Abstract Singleton? Doesn't sound viable to me. The Singleton pattern requires a `private` constructor and this already makes subclassing impossible. You'll need to rethink your design. The Abstract Factory pattern may be more suitable for the particular purpose.
Problem
Here is my sample abstract singleton class: ``` public abstract class A { protected static A instance; public static A getInstance() { return instance; } //...rest of my abstract methods... } ``` And here is the concrete implementation: ``` public class B extends A { private B() { } static { instance = new B(); } //...implementations of my abstract methods... } ``` Unfortunately I can't get the static code in class B to execute, so the instance variable never gets set. I have tried this: ``` Class c = B.class; A.getInstance() - returns null; ``` and this ``` ClassLoader.getSystemClassLoader().loadClass("B"); A.getInstance() - return null; ``` Running both these in the eclipse debugger the static code never gets executed. The only way I could find to get the static code executed is to change the accessibility on B's constructor to public, and to call it. I'm using sun-java6-jre on Ubuntu 32bit to run these tests.