从构造函数调用方法

时间:2018-03-23 17:56:53

标签: java

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

我正在为项目中的一个选项卡式窗格创建一个CustomerGUI类,并从主GUI类中调用它。我想知道的是,当我创建CustomerGUI对象时,是否可以从构造函数中调用createGUI方法?这样我只需要写tabbedPane("Customers", new CustomerGUI());

或者写tabbedPane("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));
    ...

或者

public class CustomerGUI {

public CustomerGUI() {
    createGUI();
}

public JPanel createGUI() {
    JPanel panelCustomersMain = new JPanel(new BorderLayout());
    JPanel panelCustomersMainGrid = new JPanel(new GridLayout(1, 2));
    ...

根据我的理解,请纠正我,如果我错了,构造函数用于为该类的实例设置变量。但是在我的CustomerGUI类中,我没有任何需要设置的变量,我使用构造函数作为一种入口点来启动其他方法,如main方法。我只是想知道这不是一个好习惯。

1 个答案:

答案 0 :(得分:1)

实际上,答案取决于客户端类如何使用CustomerGUI个实例。

  • 案例1

如果客户端类一次实例化CustomerGUI并在以后有效地创建组件是有意义的,那么提供公共createGUI()方法是有意义的。这是客户需求的懒惰 请注意,voidvoid initGUI()void init()返回的命名更有意义,对客户来说可能更清晰。 JPanel createGUI()含糊不清。有了这样的命名,客户端类可能会想象我们可以多次调用它。此外,该方法返回的内容不应该返回。它应该只初始化对象状态。

作为延迟加载的替代方法,您只需使用客户端类中的Supplier<CustomerGUI>即可。这样,只有在调用Supplier.get()时才能有效地创建对象。

  • 案例2

另一方面,如果实例化CustomerGUI的客户端类总是需要初始化其所有组件,createGUI()甚至不应该是公共API,则应将其定义为{{1并由构造函数调用。