Java只需一步就可以将两个对象传递给对方

Ste*_*n B 1 java class creation object

我有以下主类和主要方法:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

以及以下Parent类:

class Enemy {
     //some variables
}
Run Code Online (Sandbox Code Playgroud)

以及两个子课程:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

当两个打印方法在main方法中运行时,第一个返回null,因为Tom在分配时没有创建Enemy tom.为了解决这个问题,我没有在构造函数中分配TomPeter使用Enemy,而是在创建两个对象之后使用方法.所以更像这样:

private void setEnemies(){
    peter.tom = tom;
    tom.peter = peter;
}
Run Code Online (Sandbox Code Playgroud)

当在println方法之前调用该方法时,它可以完美地工作.我的问题是:有没有办法在对象创建时设置敌人,所以我不必在创建对象后调用单独的方法?

chi*_*ity 6

简短的回答是:不,你不能.原因是您必须一次创建一个这样的实例; 当你创建第一个时,第二个尚不存在,所以不能传递给第一个.

但这不应该是一个可怕的限制.您想要为该类添加一个void setEnemy(Enemy myEnemy)方法Enemy,然后为每个敌人调用它.像这样的东西:

Enemy peter = new Peter();
Enemy tom = new Tom();
peter.setEnemy(tom);
tom.setEnemy(peter);
Run Code Online (Sandbox Code Playgroud)