Java 从构造函数调用方法

Java 从构造函数调用方法,java,Java,我已经尝试过研究这个问题,但我是一个初学者,不确定它的正确措辞,所以如果这不是一个好问题,我很抱歉 我正在为项目中的一个选项卡式窗格创建CustomerGUI类,并从主GUI类调用它。我想知道的是,当我创建CustomerGUI对象时,从构造函数调用createGUI方法是否可以接受?这样我就只需要编写选项卡窗格(“Customers”,newcustomergui()) 或者编写选项卡窗格(“Customers”,new CustomerGUI().createGUI)会更好吗 哪一个最好 p

我已经尝试过研究这个问题,但我是一个初学者,不确定它的正确措辞,所以如果这不是一个好问题,我很抱歉

我正在为项目中的一个选项卡式窗格创建CustomerGUI类,并从主GUI类调用它。我想知道的是,当我创建CustomerGUI对象时,从构造函数调用createGUI方法是否可以接受?这样我就只需要编写
选项卡窗格(“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));
    ...