首页 > 解决方案 > 避免在类之间产生循环

问题描述

我仍在学习 OOP,但遇到了问题。

假设我有一个 GUI 类,GUI 有一个操作按钮,单击该按钮会调用另一个类对象以产生一些逻辑。我将如何在不生成 GUI 类的对象的情况下对 GUI 进行更改?我会产生这样的循环。

public class MainGUI {
  Vehicle car = new Vehicle();

  public void Button(java.awt.event.ActionEvent evt){
    car.addCar(x);
  }

  public void setIcon(){
    label1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/some 
    image")));
  }
}

public class Vehicle {
  MainGUI gui = new MainGUI();

  public void addCar(int x){
    if(x == 5){
      gui.setIcon();
    }
  }
}

我是否也认为在 GUI 类中包含逻辑是个坏主意?

谢谢

标签: java

解决方案


这个:

MainGUI gui = new MainGUI();

在您的 Vehicle 类中不引用您的主 gui。这是您在该类中创建的全新 gui

相反,您应该传递您的车辆可以与之交互的参考;最简单的方法是通过addCar方法本身:

public class MainGUI {
  Vehicle car = new Vehicle();

  public void Button(java.awt.event.ActionEvent evt){
    car.addCar(x, this);
  }

  public void setIcon(){
    label1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/some 
    image")));
  }
}

public class Vehicle {
  public void addCar(int x, MainGui gui){
    if(x == 5){
      gui.setIcon();
    }
  }
}

或者,您可以将 MainGui 引用传递给 Vehicle 的构造函数并将引用存储为类变量。关键是您需要引用您的一个 gui 对象,而不是创建任意新对象。


推荐阅读