Java 从构造函数调用方法
我已经尝试过研究这个问题,但我是一个初学者,不确定它的正确措辞,所以如果这不是一个好问题,我很抱歉 我正在为项目中的一个选项卡式窗格创建CustomerGUI类,并从主GUI类调用它。我想知道的是,当我创建CustomerGUI对象时,从构造函数调用createGUI方法是否可以接受?这样我就只需要编写Java 从构造函数调用方法,java,Java,我已经尝试过研究这个问题,但我是一个初学者,不确定它的正确措辞,所以如果这不是一个好问题,我很抱歉 我正在为项目中的一个选项卡式窗格创建CustomerGUI类,并从主GUI类调用它。我想知道的是,当我创建CustomerGUI对象时,从构造函数调用createGUI方法是否可以接受?这样我就只需要编写选项卡窗格(“Customers”,newcustomergui()) 或者编写选项卡窗格(“Customers”,new CustomerGUI().createGUI)会更好吗 哪一个最好 p
选项卡窗格(“Customers”,newcustomergui())代码>
或者编写选项卡窗格(“Customers”,new CustomerGUI().createGUI)会更好吗代码>
哪一个最好
public class CustomerGUI {
public CustomerGUI() {
}
public JPanel createGUI() {
JPanel panelCustomersMain = new JPanel(new BorderLayout());
JPanel panelCustomersMainGrid = new JPanel(new GridLayout(1, 2));
...
或
根据我的理解,如果我错了,请纠正我,构造函数用于为该类实例设置变量。然而,在CustomerGUI类中,我没有任何需要设置的变量,我使用构造函数作为一种入口点来启动其他方法,比如main方法。我只是想知道这是否是一种好的做法。事实上,答案取决于您的客户机类如何使用CustomerGUI
实例
- 案例1
如果客户机类一次实例化CustomerGUI
并在以后有效地创建内部组件是有意义的,那么提供公共createGUI()
方法是有意义的。这是一个根据客户需求进行的惰性初始化。
请注意,带有void
返回的命名,例如void initGUI()
或void init()
更有意义,并且可能对客户端更清晰。
JPanel createGUI()
不够明确。有了这样的命名,客户机类可能会想象我们可以多次调用它。此外,该方法返回一些不应该返回的内容。它应该只初始化对象状态
作为延迟加载的替代方法,您可以简单地从客户端类使用Supplier
。这样,只在调用Supplier.get()
时才有效地创建对象
- 案例2
另一方面,如果实例化CustomerGUI
的客户机类始终需要在中初始化其所有组件,createGUI()
甚至不应该是公共API,那么它应该被定义为private
,并由构造函数调用。我想在OP中添加一件事。createGUI()
不应实例化任意数量的JPanel
对象,而应只返回一个。这很容易出错,而且容易混淆。如果不需要返回的单个JPanel
,只需将方法的返回类型更改为void
。如果你需要一个单独的方法,为它创建一个额外的方法。@georgmuehlenberg我完全同意你的观点。我正在编辑:)
public class CustomerGUI {
public CustomerGUI() {
createGUI();
}
public JPanel createGUI() {
JPanel panelCustomersMain = new JPanel(new BorderLayout());
JPanel panelCustomersMainGrid = new JPanel(new GridLayout(1, 2));
...