Java 如何静态实例化依赖于实例方法的成员?
有一个基类Java 如何静态实例化依赖于实例方法的成员?,java,oop,inheritance,static,static-members,Java,Oop,Inheritance,Static,Static Members,有一个基类A,它有一个加载数据源的方法。 从A派生出各种类,包括派生类B 现在,我需要在类B中有一个静态成员变量,例如mStaticOfB,该变量只被实例化一次,以供类B的所有实例使用 这里需要注意的是,要实例化静态的mStaticOfB,我需要使用基类A继承的数据源。但是我需要一个对象的实例来获得它,而此时我没有它 我怎样才能解决这个问题?有没有一个好的/标准的方法来处理这个问题?我唯一想到的(并且尽量不使用)是 类B是一个单例。您可以使用带有统一化静态mstaticoff的类B,它在第一次调
A
,它有一个加载数据源的方法。从
A
派生出各种类,包括派生类B
现在,我需要在类B
中有一个静态成员变量,例如mStaticOfB
,该变量只被实例化一次,以供类B
的所有实例使用
这里需要注意的是,要实例化静态的mStaticOfB
,我需要使用基类A
继承的数据源。但是我需要一个对象的实例来获得它,而此时我没有它
我怎样才能解决这个问题?有没有一个好的/标准的方法来处理这个问题?我唯一想到的(并且尽量不使用)是
类B是一个单例。您可以使用带有统一化静态mstaticoff的类B,它在第一次调用构造函数时初始化
private static FieldType mStaticOfB;
...
public B(..){
if(mStaticOfB==null){
//code to set mStaticOfB
}
}
Nishant所说的,除了threadsafe:
private static FieldType mStaticOfB;
...
public B(..) {
super();
synchronized(B.class) {
if (mStaticOfB == null) {
//code to set mStaticOfB
}
}
}
从你的描述中,我看不出让B类成为一个单体将如何解决这个问题。你能解释一下吗?@Ted Hopp:我不会让成员变量成为静态的
,通过使用单例,所有实例的变量都是相同的