Вот мой пример абстрактного одноэлементного класса:
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;
Запуск обоих в отладчике eclipse статический код никогда не выполняется. Единственный способ найти статический код - это изменить доступность конструктора B к публичному и вызвать его.
Я использую sun-java6-jre на Ubuntu 32bit для запуска этих тестов.