Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何静态实例化依赖于实例方法的成员?_Java_Oop_Inheritance_Static_Static Members - Fatal编程技术网

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:我不会让成员变量成为
静态的
,通过使用单例,所有实例的变量都是相同的