java - 在此示例中使用反射是否合适

标签 java reflection static-variables

我询问您对此事的看法,因为我不确定在这种情况下是否应该使用反射。

场景是我有一个表,我需要确定它是否处于脏状态。如果用户对表进行更改,然后导航到另一个页面而不保存更改...应该弹出一条警告消息,指出“未保存的更改将丢失”。

我使用的方法是创建一个标志,如果表脏则设置为 true,否则设置为 false。当用户在不保存表格的情况下导航离开时,通过单击链接(将他带到另一个站点的链接)会弹出警告消息。另一方面,如果用户在离开之前保存表格,则不会出现警告消息。

如果我将脏标志设置为静态,可能会出现的问题是其他用户可能会遇到处于不应该状态的标志。由于静态变量绑定(bind)到类,每次我检查该变量时,该字段的值都会在应用程序中的每个用户之间共享,不是吗?

但是,另一方面,如果我不将其设为静态并将其用作成员变量,那么当我通过反射实例化该对象时,它将返回默认值。如果是 boolean 值则为 False,如果为字符串则为 null,或者将任何值初始化为。

这让我得出这样的结论:反射不是本示例中使用的最佳选择?

我期待收到您的来信,非常感谢您的意见/观点。

非常感谢。

最佳答案

您的表将由 TableModel 支持。向用户显示数据页面并允许用户编辑该模型内的数据的 TableModel 实例应该“知道”它是否处于保存状态。

这可以简单地通过创建自定义表模型并添加脏标志来完成 - 每次调用 setValueAt 时都会触发该标志:

public class DirtyTableModel extends DefaultTableModel {

  protected boolean dirty;

  public boolean isDirty() {
    return dirty;
  }
  /**
   * Called with setDirty(false) after save
  */
  public void setDirty(boolean on) {
    dirty = on;
  }
  @Override
  public void setValueAt(Object aValue, int row, int column) {
    setDirty(true);
    super.setValueAt(aValue, row, column);
  }

}

不需要任何形式的反射(reflection)。

关于java - 在此示例中使用反射是否合适,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36937017/

相关文章:

python - python 类中的静态变量声明

c++ - 静态变量 cpp 不想改变

reflection - Kotlin - 是否有一种聪明的方法可以为类的所有方法抛出 NotImplementedError?

java静态变量序列化

JavaFX 窗口未立即打开

java - JPA 实体何时以及为什么应该实现 Serializable 接口(interface)?

c++ - 如何在 OpenCV 中将图像与另一个图像相关联

java - 如何模拟局部最终变量

java - 使用 Java 在线程之间传输数据

java - JFrames 方法 setVisible(true) 或 setVisible(false) 不在循环中工作。框架无法正确显示