对象创建者
ObjectCreator.java
import java.util.ArrayList;
import java.util.List;
class ObjectCreator {
List<CreatedObject> objects;
static ObjectCreator objectCreator;
public ObjectCreator() {
objects = new ArrayList<CreatedObject>();
CreatedObject createdObject = new CreatedObject(9); //second object
}
public static void main(String[]args) {
objectCreator = new ObjectCreator(); //first object
}
}
创建的对象
CreatedObject.java
class CreatedObject {
public CreatedObject() {
ObjectCreator.objectCreator.objects.add(this); //adds itself
//nullpointer here
}
}
以上是我的问题的例证。我在行ObjectCreator.objectCreator.objects.add(this);
处得到一个nullpointer异常,因为objectCreator(在ObjectCreator类中)为null。我相信这是因为objectCreator的构造函数(在类ObjectCreator中)尚未结束,因此该对象未被赋予值。
在我的实际程序中,我有一个负责根据算法创建对象的类。该算法通过类的构造函数参数提供信息。在构造函数的最后,我想要有多个(非静态)ArrayLists,每个ArrayLists都填充了对已创建的每种类型的所有不同对象的引用。我希望这些对象在它们的构造函数中将自己添加到ArrayList中。即object1 creates object2 creates object3 adds itself to ArrayList stored in object1
这种方法显然证明是无用的。
问题:如何以干净有效的方式实现这些结果(ArrayLists填充了在ObjectCreator类的构造函数中创建的对象)?这似乎是一个非常基本的功能,在许多程序中都是必要的,所以它是如何完成的?
答案 0 :(得分:0)
问题在于访问该静态字段。 main
中的赋值在构造函数完成之后才会发生,但您正在尝试在内部类构造函数中读取它。
如果您要使用内部(非静态)类,只需使用封闭类的实例列表。
答案 1 :(得分:-1)
您可以调用静态字段,这意味着不会调用构造函数。
ObjectCreator.objectCreator.objects.add(this);
您可以在类中初始化静态字段:
static ObjectCreator objectCreator = new ObjectCreator();