【问题标题】:Call a method of the object which is created in another class调用在另一个类中创建的对象的方法
【发布时间】:2017-03-30 08:21:48
【问题描述】:

我有一个小问题。

我有 3 个班级看起来“像”这样:

public class Gun{
    public void Shot(){
        // shoot code
    }

    public void RenderGun()
    {
        // render code
    }

    // more methods
}


public class GameManager
{
    Gun gun;

    public GameManager()
    {
        gun = new Gun();
    }

    // methods using GunClass methods.
}

public class HudScreen
{
    Gun gun;

    public HudScreen()
    {
        gun = new Gun();
    }

    public void GunShotButton()
    {
        gun.Shoot();
    }
}

问题是我有两个 Gun 对象,我想要一个,但在 HudScreen 和 GameManager 类中都使用它。

那么,如果我在 GameManager 中创建一个新的 Gun 对象,如何从 HudScreen 类中“调用”这个对象?


谢谢,MM。

【问题讨论】:

标签: java object reference


【解决方案1】:

GameManager 构造函数

 public GameManager(Gun gun){ 
     this.gun = gun;
 }

HudScreen 构造函数

public HudScreen(Gun gun){
      this.gun = gun;
 }

从创建 Gun 对象的 main 方法中,您可以将其传递给 GameManager 和 HudScreen 的构造函数

 public static void main() {
      Gun gun = new Gun();
      HudScreen hudScreen = new HudScreen(gun);
      GameManager gameManager = new GameManager(gun)
   }

如果您不想以相同的方法创建 GameManager 和 HudScreen 但仍想使用相同的 Gun 对象,那么您可以这样做 1.初始化Gun对象 2. 在 GameManager 和 Hudscreen 上,您可以将其传递给构造函数,也可以直接将其传递给这些类中的方法。 例如假设您希望让 GameManager 构造函数接收新创建的枪并将相同的枪传递给 Hudscreen.GunShotButton。我希望你在这里有一个线索-

public class Gun{
    public void Shot(){
        // shoot code
    }

    public void RenderGun()
    {
        // render code
    }

    // more methods
}


public class GameManager
{
    Gun gun;

    public GameManager(Gun gun)
    {
        this.gun =gun;
    }

    // methods using GunClass methods.
}

public class HudScreen
{   
    public HudScreen()
    {
    }

    public void GunShotButton(Gun gun)
    {
        gun.Shoot();
    }
}

【讨论】:

  • 好的,但是如果我不会像 main 一样使用相同的方法创建 HudScreen 和 GameManager 对象怎么办?我想在两个不同的类(对象)中创建 HudScreen 和 GameManager 对象。仍然有可能同时到达同一个 Harpoon 对象吗?
  • 关于你的编辑:真的......你很有帮助,但我仍然不知道在哪里初始化枪对象。
  • 好的。我现在明白了。无论如何,我犯了一些错误,现在我要重新设计我的游戏引擎。谢谢,你很棒。祝你有美好的一天。
【解决方案2】:

以这种方式更改构造函数:

public GameManager(Gun gun) {
   this.gun = gun;
}

HudScreen 类中也是如此。 然后在一些 Main 类中:

class Main {    
   public static void main(String[] args) {
      Gun gun = new Gun();
      HudScreen hudScreen = new HudScreen(gun);
      GameManager gameManager = new GameManager(gun)
   }
}

目前main 方法被假定为进行初始化的顶级方法。这也可能是创建 GunGunManagerHudScreen 对象的其他方法。

【讨论】:

    【解决方案3】:

    为每个 NiftyGUI 屏幕注册一个 ScreenController。通过创建实现 de.lessvoid.nifty.screen.ScreenController 接口及其抽象方法的 Java 类来创建 ScreenController。

    【讨论】:

    • 这个问题很笼统,根本谈不上漂亮。通用的 java 解决方案比针对此类问题强加特定库或框架的规范要好。
    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 2019-07-29
    • 1970-01-01
    • 2012-05-01
    • 2015-02-05
    • 2012-06-01
    • 2013-04-21
    • 1970-01-01
    相关资源
    最近更新 更多