好的,所以我现在从事 Java 编程已经有一段时间了,偶尔我发现我需要创建一个对象的新实例,但我不需要引用变量,例如使用 GUI。当我使用 GUI 工作时,我会做这样的事情:
public class MainWindow extends JFrame {
/**
* Creates new form MainWindow
*/
public MainWindow() {
initComponents();
}
private void initComponents() {
/*
* Setup main properties of window
*/
JComponent contentPane = (JComponent)getContentPane();
contentPane.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setJMenuBar(new MenuBar());
setTitle("Window Title");
setMaximumSize(new Dimension(1280, 720));
setMinimumSize(new Dimension(1280, 720));
setPreferredSize(new Dimension(1280, 720));
setSize(1280, 720);
setLocationRelativeTo(null);
setResizable(false);
//Add other stuff here
setVisible(true);
}
}
这样,每当我需要实例化 GUI 时,我只需调用:
new MainWindow();
但是,我注意到 Netbeans 就此给了我一个提示,所以我知道这样做是不正确的做法。
话虽如此,当您不需要变量时,处理对象实例化的正确方法是什么?
最佳答案
您的对象未被任何其他对象引用,可能会被垃圾回收。如果您的应用程序中只需要单个实例,则可以在同一个类中使用静态方法来实现单例,如下所示(以下代码未编译):
public class MainWindow extends JFrame {
private static MainWindow instance;
public static MainWindow getMainWindow() {
if (instance == null) {
instance = new MainWindow();
}
return instance;
}
/**
* Creates new form MainWindow
*/
private MainWindow() {
initComponents();
}
private void initComponents() {
// ... skip original code for brevity ...
}
}
请注意,在这种情况下,您可以将构造函数设为私有(private)。
EDIT 根据评论将实例更正为空比较。
关于java - 不将对象的实例分配给变量是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23704010/