将多个对象相互传递

时间:2012-10-29 02:47:20

标签: java oop pass-by-value

这是一个有点奇怪的问题,我有一个 GUI 类,它在构造函数中启动一个逻辑类,负责处理处理或物流。应用程序然后他们是一个处理程序类,其中包含一堆ActionListners KeyListeners,它们附加到 GUI

中的UI组件

逻辑处理程序类的构造函数中,我将 GUI 类作为参数,以便能够操纵逻辑处理程序

GUI 类创建的GUI 组件

我的问题是处理程序使用逻辑类,反之亦然(逻辑类使用处理程序< / strong> class)并且上面描述的方法实际上不可能,一个是另一个之前的实例,一个在尝试使用另一个时将为null。

示例:

public class GUI() 
{
    this.handler = new Handler(this);
    this.logic = new Logic(this);
}

如果handler尝试使用logic中的内容,则会返回null

解决此问题的一种方法是让handler的设定者采用logic,反之亦然,但这似乎不是答案。

3 个答案:

答案 0 :(得分:1)

简单:

public class GUI() 
{
    this.handler = new Handler(this);
    this.logic = new Logic(this);
    handler.setLogic(logic);
    logic.setHandler(handler);
}

答案 1 :(得分:1)

我认为可以在GUI中公开Handler和Logic,让公众访问它。通过这样做,因为您的处理程序和逻辑已经引用了GUI,它们可以间接地相互访问:

class Gui {
  private Handler handler;
  private Logic logic;

  public Handler getHandler() {
    return this.handler;
  }
  public Logic getLogic() {
    return this.logic;
  }
}

class Handler {
  private Gui gui;
  public Handler(Gui gui) {
    this.gui = gui;
  }

  public void doSomething() {
    // access logic
    this.gui.getLogic().doSomeLogic();
  }
}

关于“优雅”,我不认为组件之间的(imho)凌乱的依赖关系的原始设计是完美的:)所以,不要把重点放在使这些东西看起来“优雅”,做一些重新思考,可能你会发现一切都会自动变得更加优雅。 :)

答案 2 :(得分:0)

在您第一次使用handlerlogic之前,您可以将此代码段添加到其中 if(handler == null)
 this.handler = new Handler(this);
if(logic == null)
 this.logic = new Logic(this);