firePropertyChange - 参数oldValue和newValue有什么关系?

时间:2018-02-03 13:09:48

标签: java swing listener propertychangelistener

我目前正在开发一个项目,在该项目中,当模型部分中的某些内容发生变化时,会使用propertyChangeListener来更新程序的视图部分。该程序解决了给定的数独谜题并更新模型以包含解决方案。

我使用firePropertyChange方法,该方法具有参数oldValue和newValue。我知道这些必须是不同的才能发生某些事情,但实际上它们究竟是什么呢?在我的程序中,模型总是在发生某些事情时更新,我从不使用oldValue或newValue中包含的信息。

是否可以将这些作为“1”和“2”来确保它们总是不同?这会导致任何其他问题。这是一个名为clear的方法,它将数独库重置为空白板:

public void clear() {
    String oldBoard = getBoard();
    for (int i=0; i<9; i++) {
        for (int k=0; k<9; k++)
            plan[i][k] = 0;
    }
    pcs.firePropertyChange("clear", oldBoard, getBoard());
}

2 个答案:

答案 0 :(得分:1)

是的,从一般意义上来说这很重要,因为当你为被观察实体编写代码时,你会写下这个实体永远不知道是谁或是什么在听它或观察者如何去做使用监听器要提供给他们的信息。它可能对观察者来说很重要,但它可能不会,但总是假设它是,尽可能保持信息的准确性,并且您的代码对于将来的扩展和使用将更安全。

答案 1 :(得分:1)

如果属性更改的接收者是您的内部类并且他们知道忽略属性更改事件的旧/新值,那么它将起作用。您可能仍需要清楚地记录这一事实,以防您在一段时间之后忘记它。为了使代码更易于维护和可读,但是编写自己的侦听器接口会更好,但需要更多的工作。

一个例子:

public interface SudokuListener {
    void sudokuCleared();
}