问题
我有一个 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/