首页 > 解决方案 > 如何保证更新其他字段时更新字段?

问题描述

我有课

public class Order {
  private LocalDateTime creationDate;
  private Date creationDateAsDate;
 }

creationDate是订单中的现有字段。这creationDateAsDate是一些功能的新领域。

我需要在保存旧字段的所有位置设置并保存这个新字段。不幸的是,我正在使用遗留代码,并且我有 5 个creationDate设置字段的位置。现在我看到了 2 个解决方案:

  1. 在所有调用creationDateAsDatesetter 的地方 调用 setter creationDate
  2. creationDateAsDate在 setter 中调用creationDatesetter。

我不喜欢这两种变体。有人可以回答如何做到这一点吗?它可能是我的变体之一,或其他东西。

标签: java

解决方案


我建议更新两个没有错误的设置器(这就是它们存在的原因)调用通用私有方法以避免无限递归。

public void setCreationDate(LocalDateTime creationDate) {
    Date creationDateAsDate = Date.from(creationDate.atZone(ZoneId.systemDefault())
                                                    .toInstant());
    updateDates(creationDate, creationDateAsDate);
}
public void setCreationDateAsDate(Date creationDateAsDate) {
    LocalDateTime creationDate = LocalDateTime.ofInstant(
            creationDateAsDate.toInstant(), 
            ZoneId.systemDefault());
    updateDates(creationDate, creationDateAsDate);
}
private void updateDates(LocalDateTime creationDate, Date creationDateAsDate) {
    this.creationDate = creationDate;
    this.creationDateAsDate = creationDateAsDate;
}

推荐阅读