【问题标题】:firePropertyChange - does it matter what the parameters oldValue and newValue are?firePropertyChange - oldValue 和 newValue 参数有什么关系?
【发布时间】:2018-02-03 13:09:48
【问题描述】:

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

我使用具有参数 oldValue 和 newValue 的 firePropertyChange 方法。我知道这些必须有所不同才能发生某些事情,但它们到底是什么真的重要吗?在我的程序中,模型总是在发生某些事情时更新,我从不使用包含在 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());
}

【问题讨论】:

  • 您是否在某处为该属性添加了属性更改侦听器?大多数情况下,我看到 PropertyChangeEvent 与什么属性相关联,而不是 oldValue、newValue,尽管它们有时很有用。

标签: java swing listener propertychangelistener


【解决方案1】:

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

一个例子:

public interface SudokuListener {
    void sudokuCleared();
}

【讨论】:

    【解决方案2】:

    是的,这在一般意义上很重要,因为当您为被观察实体编写代码时,您编写它的想法是,该实体永远不知道谁或什么在听它或观察者将如何使用听众将要提供给他们的信息。它对观察者可能很重要,也可能不重要,但始终假定它是重要的,尽可能保持信息准确,并且您的代码对于未来的扩展和使用会更安全。

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2015-08-02
      • 2018-07-27
      • 2021-06-09
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多