我已经尝试过研究这个问题,但我是初学者,我不确定它的正确措辞,所以如果这不是一个好问题,我很抱歉。
我正在为项目中的一个选项卡式窗格创建一个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方法。我只是想知道这不是一个好习惯。
答案 0 :(得分:1)
实际上,答案取决于客户端类如何使用CustomerGUI
个实例。
如果客户端类一次实例化CustomerGUI
并在以后有效地创建组件是有意义的,那么提供公共createGUI()
方法是有意义的。这是客户需求的懒惰
请注意,void
或void initGUI()
等void init()
返回的命名更有意义,对客户来说可能更清晰。
JPanel createGUI()
含糊不清。有了这样的命名,客户端类可能会想象我们可以多次调用它。此外,该方法返回的内容不应该返回。它应该只初始化对象状态。
作为延迟加载的替代方法,您只需使用客户端类中的Supplier<CustomerGUI>
即可。这样,只有在调用Supplier.get()
时才能有效地创建对象。
另一方面,如果实例化CustomerGUI
的客户端类总是需要初始化其所有组件,createGUI()
甚至不应该是公共API,则应将其定义为{{1并由构造函数调用。