【发布时间】:2016-08-04 09:40:46
【问题描述】:
我有以下主要类和主要方法:
public class Main {
Peter peter = new Peter(this);
Tom tom = new Tom(this);
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.peter.tom);
System.out.println(main.tom.peter);
}
}
和下面的父类:
class Enemy {
//some variables
}
以及以下两个子类:
class Tom extends Enemy {
Enemy peter;
Tom(Main main) {
this.peter = main.peter;
}
}
class Peter extends Enemy {
Enemy tom;
Peter(Main main) {
this.tom = main.tom;
}
}
当两个 print 方法在 main 方法中运行时,第一个返回 null,因为 Tom 在分配给 Enemy tom 时尚未创建。
为了解决这个问题,我没有在构造函数中将Tom 和Peter 分配给Enemy,而是在创建这两个对象之后使用一个方法。
所以更像这样:
private void setEnemies(){
peter.tom = tom;
tom.peter = peter;
}
在 println 方法之前调用该方法时,它可以完美运行。 我的问题是:有没有办法在创建对象时设置敌人,这样我就不必在创建对象后调用单独的方法?
【问题讨论】:
-
请注意,您描述的问题是因为
Peter peter = new Peter(this);是不安全发布 的示例:您在@ 之前将Main引用传递给Peter的构造函数987654332@ 已完全初始化。这意味着Peter可以在Main处于有效状态之前开始使用它,因此可能会导致之前的意外和不可预测。 -
我知道在我当前的项目中,我从另一个类的构造函数中创建了
Peter和Tom。我以这种方式发布它以简化代码。 -
RadioButtons 也做了同样的事情,将一个RadioButtonGroup添加到他们的构造/作为工厂。然后 RadioButtonGroup 确保所有单选按钮相互关联,
标签: java class object creation