Я использую суперкласс, который хранит ссылки на все экземпляры SuperClass
и различные подклассы.Class Loader: создавать статические поля подклассов
public class SuperClass{
private static final Map<Integer,? extends SuperClass> instances=new TreeMap<>();
private static final SuperClass inst1=new SuperClass(1,"1");
public final int ref; // exemplary comparable property
private final Object commonAttribute; //exemplary
protected SuperClass(Object o,int ref){
commonAttribute=o;
this.ref=ref;
instances.put(ref,this);
}
}
Когда я создаю экземпляр переменные подклассов, я надеюсь, что все экземпляры, которые будут добавлены к instances
.
public class SubClass{
private final Object specificAttr;
private static final SubClass inst2=new SubClass(2,"2","whatever");
private final SubClass(Integer i,Object o1, Object o2){
super(i,o1);
this.specificAttribute=o2;
}
}
Confusingly элементы instances
, кажется, зависит от того в какой класс main
метод. Когда у меня есть метод main
в Superclass
, только inst1
добавляется, что не требуется в моем случае. Есть ли какой-либо механизм для настройки, какие (статические!) Переменные инициализируются jvm.
jvm создает статические переменные при загрузке класса. подробнее здесь http://stackoverflow.com/questions/3499214/when-does-static-class-initialization-happen. просто сделайте что-нибудь из списка с обоими классами – AdamSkywalker