gpt4 book ai didi

java - 如何检查对象是否已经创建?

转载 作者:行者123 更新时间:2023-11-30 07:58:30 25 4
gpt4 key购买 nike

问题

我有一个 Army 类,它运行两次(由一个单独的驱动程序类)以创建两个军队。在那个 Army 类中,有以下语句可以从我拥有的其他类文件创建新对象:

  public final Archer archer = new Archer(this);
public final Catapult catapult = new Catapult(this);
public final NCatapult ncatapult = new NCatapult(this); //Ninja catapult
public final Ninja ninja = new Ninja(this);
public final Horse horse = new Horse(this);
public final Samurai samurai = new Samurai(this);

每个对象的构造函数都需要在它们的构造函数方法参数中有一个“Army”对象,因此实例化中使用了 this 关键字。

所以。在 Horse 类的一个方法中,我创建了一个新的“Warrior”对象,因为 Warrior 最初并未在 Army 类中实例化。

private boolean warriorCreated = false;
public void dismount(){
if (!warriorCreated){
Warrior warrior = new Warrior(myArmy);
warriorCreated = true;
myArmy.getOurArmyWindow().getTabbedPane().addTab("(Ethan)", new ImageIcon("images/warriorIcon.jpg"), warrior.genGetPanel()); //This is just adding the Warrior's tab to my GUI. It's not relevant to the problem.
}
...//Some stuff to handle when the method is called and warriorCreated is true
}//end dismount()

您会注意到它如何在 Warrior 的构造函数中使用变量“myArmy”。这只是在实例化 Horse 时传递的 Army 对象。

public Horse(Army armyInstance){ //A constructor that takes in whatever Army object called it
myArmy = armyInstance;
}

在所有不同的实例化对象中,我可以使用 myArmy.getEnemyArmyInstance() 方法访问其他敌方军队。我不想详细解释它是如何工作的,也不想占用比我现在更多的空间,所以请相信我它是有效的。

这意味着通常我可以通过调用类似 Ninja enemyNinja = myArmy.getEnemyArmyInstance().ninja; 来引用由对方军队实例化的对象(我可以用任何其他对象替换“Ninja”我想引用)。

但是,因为 Warrior 对象是由 Horse 类方法实例化的,而不是从每个 Army 对象的开始就正确的,所以我首先想检查它是否已经实例化,然后再尝试从一个单独的对象引用它。

这是我遇到麻烦的地方。每当我尝试检查一个 Warrior 对象是否已经实例化时,它都会在编译时给我一个错误。

例如,考虑这个检查:

public void checkForWarrior(){
if (myArmy.getEnemyArmyInstance().warrior != null){
System.out.println("A warrior exists!");
}
else
System.out.println("There is no warrior!");
}

它抛出错误

error: cannot find symbol   
if (myArmy.getEnemyArmyInstance().warrior != null){
^
symbol: variable warrior
location: class Army

我尝试过的

我认为创建的 Warrior 对象可能不是 Army 的成员(这是正确的术语,对吗?),所以我尝试将“.horse”添加到该行中,但得到了类似的结果。

   if (myArmy.getEnemyArmyInstance().horse.warrior != null){
^
symbol: variable warrior
location: variable horse of type Horse

我什至尝试添加一个 boolean 值,当一个 Warrior 被实例化时,它会在 Horse 类中打开,然后首先检查它。但是没有骰子。

private boolean mounted = true; //This is in the Horse class and is set to
false when a Warrior is instantiated.

在其他类中:

if (myArmy.getEnemyArmyInstance().horse.getMounted()){
Warrior enemy = myArmy.getEnemyArmyInstance().warrior;//Still gives me an
//error that it cannot find the variable warrior. (I tried adding .horse to
//this, too).

问题

对于不是实例化它的 Horse 的对象,我如何检查 Warrior 对象是否已经实例化以便我可以从其他对象引用它?

最佳答案

如果我正确理解了你的问题,你需要将以下内容添加到你的 Army 类中:

public Warrior warrior;

然后在您的 Horse 类中:

  public void dismount(){
if (myArmy.warrior == null){
myArmy.warrior = new Warrior(myArmy);
myArmy.getOurArmyWindow().getTabbedPane().addTab("(Ethan)", new ImageIcon("images/warriorIcon.jpg"), warrior.genGetPanel()); //This is just adding the Warrior's tab to my GUI. It's not relevant to the problem.
}
...//Some stuff to handle when the method is called and warriorCreated is true
}//end dismount()

希望对您有所帮助。

关于java - 如何检查对象是否已经创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40393982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com