java - 避免在类之间产生循环
问题描述
我仍在学习 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 类中包含逻辑是个坏主意?
谢谢
解决方案
这个:
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 对象,而不是创建任意新对象。
推荐阅读
- android - 将 Firebase 添加到我的 Android 项目时出错
- reactjs - React Google Analytics - 如何检查是否已初始化?
- python - 硒复选框单击在python中不起作用
- hangfire - 如何让 Hangfire 挑选工作在最后一小时内排队?
- php - 我如何在同一服务器和域上运行 php 和 django
- c++ - 编译器何时自动调用移动语义?
- rust - 包含用于初始化 Trie 结构的大型源文件的 Rust crate 无法编译 (OOM)
- php - Wordpress 基于用户代理更改主题
- ruby-on-rails - 当我使用 sidekiq 时,ActionMailer::Base.deliveries 给出了空白数组?我们需要为此做任何配置吗
- php - Problem with displaying user-pictures relation in Laravel 5.8