gpt4 book ai didi

java组合

转载 作者:行者123 更新时间:2023-11-30 06:19:59 25 4
gpt4 key购买 nike

我正在尝试使用和学习在尊重 OOP 编程灵 active 的类之间的组合关系,这是一个解释我正在尝试做的事情的小示例代码:

主类:

public class MainFrame extends JFrame {

private Test test;
public static void main(String[] args) {
new MainFrame();
}

public MainFrame() {
initFrame();
}

private void initFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(100,100);
setResizable(false);
setUndecorated(true);
setVisible(true);
setLocationRelativeTo(null);
test.update();

}
public void setNumber(int i) {
System.out.println(i);
}
}

和这个类:

public class Test {
MainFrame mainFrame;
public void update(){
mainFrame.setNumber(10);
}

}

如果我运行这个我会得到:

Exception in thread "main" java.lang.NullPointerException

我如何更改代码以便:

  • Test类只引用main中创建的MainFrame实例,不创建的新实例Test 类中的 code>MainFrame

  • 是否可以避免使用静态类和静态函数来做到这一点?

最佳答案

The Test class refers only to the MainFrame instance created in the main, not to create a new instance of the MainFrame inside the Test class

抱歉,这没有意义。 Java 不是这样工作的,运行时会教你。

这段代码从上到下都是错的。

Test 类中的实例为空,因为您从未对其进行初始化。

Test 类对 MainFrame 类中的 main 方法一无所知,也不应该知道。

一旦该方法退出并被垃圾收集,该 main 方法中的实例就会超出范围。

为什么 MainFrame 类会引用其中的 Test 实例?糟糕的设计。它叫做 circular dependency .一旦添加,就永远无法将这两个类分开。有时他们无能为力,但我在这里完全看不到任何理由,尤其是对于名为 Test 的类。 Test 可以知道MainFrame,但是MainFrame 永远不需要知道Test。你做错了。

您不需要扩展 JFrame。您没有通过扩展来添加任何东西。我敢打赌,这应该是您将添加到 JFrameJPanel

关于java组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22437201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com