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 所建议的,如果 Updater 类有一个公共基类(我们称之为 UpdaterBase),那么在那里定义 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() 两次,对吧?您也可以简化这部分。

于 2012-05-22T07:49:24.553 回答