【发布时间】:2016-02-26 18:57:47
【问题描述】:
我使用一个超类来存储对SuperClass 和各种子类的所有实例的引用。
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;
}
}
令人困惑的是instances 的元素似乎取决于main 方法在哪个类中。当我在Superclass 中有main 方法时,只有
添加了inst1,这在我的情况下是不需要的。
是否有任何机制可以自定义 jvm 初始化哪些(静态!)变量。
【问题讨论】:
-
jvm 在类加载时实例化静态变量。更多信息在这里stackoverflow.com/questions/3499214/…。只需从两个类的列表中做一些事情
标签: java class inheritance classloader static-members