1

メソッドを条件ごとに分類し、各サブクラスへのインターフェイスを実装する必要があることはわかっていますが、クライアントクラスがそれをどのように使用するかわかりません。簡単なサンプルを教えてください。

 public void buildInfoItemUpdater() {
    for (int i = 0; i < this.projectInfoInputItemUpdaters.size(); i++) {
        if (this.projectInfoInputItemUpdaters.get(i) instanceof ComboBoxUpdater) {
            ComboBoxUpdater tempItem = (ComboBoxUpdater) this.projectInfoInputItemUpdaters.get(i);
            projectInfoInputItemUpdaters.get(i).setAnswer(tempItem.getUserAnswer());
        } else if (this.projectInfoInputItemUpdaters.get(i) instanceof TextBoxUpdater) {
            TextBoxUpdater tempItem = (TextBoxUpdater) this.projectInfoInputItemUpdaters.get(i);
            projectInfoInputItemUpdaters.get(i).setAnswer(tempItem.getUserAnswer());
        } else if (this.projectInfoInputItemUpdaters.get(i) instanceof TextFieldUpdater) {
            TextFieldUpdater tempItem = (TextFieldUpdater) this.projectInfoInputItemUpdaters.get(i);
            projectInfoInputItemUpdaters.get(i).setAnswer(tempItem.getUserAnswer());
        }
    }
}

前もって感謝します。

4

1 に答える 1

2

@SirPentorによって提案されているように、アップデータークラスに共通の基本クラスがある場合(アップデーターベースと呼びます)、そこでgetUserAnswer()メソッドを定義します。おそらく抽象として定義します。

次に、buildInfoItemUpdater()を次のように簡略化できます。

public void buildInfoItemUpdater() {
    for (int i = 0; i < this.projectInfoInputItemUpdaters.size(); i++) {
        UpdaterBase tempItem =
              (UpdaterBase) this.projectInfoInputItemUpdaters.get(i);
        projectInfoInputItemUpdaters.get(i).setAnswer(tempItem.getUserAnswer());
    }
}

this.projectInfoInputItemUpdaters.get(i)さらに、との違いはprojectInfoInputItemUpdaters.get(i)何ですか?同じオブジェクトでget()を2回呼び出しているようですよね?この部分も単純化できるかもしれません。

于 2012-05-22T07:49:24.553 に答える