Thu*_*fir 1 java memory-management observable observer-pattern
这个Controller类是一个单身人士,这似乎是一个允许安全传递this到的特殊情况Controller.
Netbeans给出了
配置"在构造函数中传递可疑参数"提示
对于controller.addObserver(this);这点让我问更好的方法是什么,虽然我收集这不是一个好方法.
package net.bounceme.dur.usenet.swing;
import java.util.Observable;
import java.util.Observer;
import java.util.logging.Logger;
import javax.mail.Folder;
import javax.swing.ListModel;
import net.bounceme.dur.usenet.controller.Controller;
import net.bounceme.dur.usenet.controller.MessageBean;
import net.bounceme.dur.usenet.controller.MessagesDefaultListModel;
public class MessageSelect extends javax.swing.JPanel implements Observer {
private static final Logger LOG = Logger.getLogger(MessageSelect.class.getName());
private Controller controller = Controller.getInstance();
private ListModel messages = new MessagesDefaultListModel();
private MessageBean messageBean = new MessageBean();
@SuppressWarnings("unchecked")
public MessageSelect() {
controller.addObserver(this);
initComponents();
messagesJList.setPrototypeCellValue("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
}
Run Code Online (Sandbox Code Playgroud)
当对象尚未完全构造时,您将传递this给外部类(Controller).Controller然后可以在构造尚未完成时引用您的对象.
大多数人通过使用工厂方法解决这个问题,工厂方法首先创建对象,然后从this外部传递.
// private to force clients to use the static factory method
private MessageSelect() {
initComponents();
messagesJList.setPrototypeCellValue("xxx");
}
public static MessageSelect createInstance() {
MessageSelect instance = new MessageSelect();
instance.controller.addObserver(instance);
return instance;
}
Run Code Online (Sandbox Code Playgroud)
看看这篇关于安全对象构造的优秀Brian Goetz文章.