1

クラスはシングルトンであり、に安全に渡すことControllerができる特殊なケースのようです。thisController

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");
    }
4

2 に答える 2

7

オブジェクトが完全に構築されていない場合はthis、外部クラス( )に渡しています。その後、構築が完了していないときにオブジェクトを参照できます。ControllerController

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;
}

安全なオブジェクトの構築に関するこの優れたBrianGoetzの記事をご覧ください。

于 2012-07-26T05:31:08.060 に答える
1

オブジェクトが完全に初期化されていないため、これをパラメータとして使用すると、コンストラクタで危険になる可能性があります

http://wiki.netbeans.org/Java_Hintsから

重要なのは、スーパークラスはまだ初期化されていないクラスの一部にアクセスしようとする可能性があるということです(または後で自分の構築中に変更します)

于 2012-07-26T05:33:10.500 に答える