你能把正在构造的对象放到另一个类的静态字段中吗?

时间:2014-02-22 07:33:09

标签: java static

假设我有一个带有静态列表的类X.然后,假设另一个类Y实例化类Z.

Z的构造函数是否可以将Z放在X列表的末尾。另一种方法是在Y中实例化Z,然后让Y手动将Z放在X的列表中。哪种方式更好?

以下是一些代码:

public class X { 
    public static List list = new List() ; 
} 

public class Y { 
    makeZ() { 
         Z xObject = new Z() ;
    } 
} 

public class Z { 
    Z() {
         // put Z into X's list
    } 
} 

替代Y类是有效的。 。 。

public class Y { 
    makeZ() { 
         Z xObject = new Z() ;
         X.list.put(Z) ; 
    } 
}

当然,在这种情况下,Z的构造函数不会将自己置于X的列表中,因为Y的makeZ()方法就是这样做的。

4 个答案:

答案 0 :(得分:0)

在构造函数中,您可以访问this,它代表正在初始化的对象,因此您可以将其用作任何其他对象。

答案 1 :(得分:0)

  

Z的构造函数是否可以将Z放在X列表的末尾

是的,如果Z可以访问X的列表。

  

哪种方式更好?

这取决于语义。列表是否与Z的职责密切相关或更多与Y的关系?

答案 2 :(得分:0)

您需要做的就是确保可以在全局范围内访问x变量,或者有一个方法来实现这一点,而实例化Z只需使用此方法来添加它。

答案 3 :(得分:0)

这是一个完整的(差不多)程序,可以回答你问题的第一部分:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TestClass   {
    public static void main(String[] args) {
    Y y = new Y();
    y.makeZ();
    Iterator<Object> it = X.list.iterator();
    while (it.hasNext())
        System.out.println(it.next());
    }   
}

class X { 
  public static List<Object> list = new ArrayList<Object>();
} 

class Y { 
void makeZ() { 
     Z xObject1 = new Z(10) ;
     Z xObject2 = new Z(11) ;
    } 
} 

class Z {
int a;
Z(int j) {
     // put Z into X's list
    a = j;
    X.list.add(this);
}
public String toString() {
    return a + "";
}
}

以及问题的第二部分: 我总是致力于在构造函数中初始化对象。 如果从z类中添加一个对象是初始化的一部分,我认为这是一个不错的选择,否则就在其他地方进行。(始终保持代码整洁)