无法覆盖 Lombok getter

Can't override Lombok getter

注意:这里几个人引用的解决方案不适用于我的问题...

我有一个 java.sql.Timestamp 字段,我想在 getter 中将其格式化为字符串。我在 class 的开头使用 Lombok @Data。但是,当我用我自己的 getter 覆盖 Lombok 的 getter(以格式化时间戳)时,该字段始终为空。我在文档中没有看到任何解释此行为的内容。

此代码块为我提供了作为时间戳的结算日期:

@Data
public class MyObject {
  public Timestamp settlementDate;
}

这段代码给了我一个 NPE,因为 settlementDate 为空。嗯,突然想到。。。难道是因为getter的return类型和会员类型不一样?

@Data
public class MyObject {
  public Timestamp settlementDate;

  String getSettlementDate() {
    return new SimpleDateFormat("yyyy-MM-dd").format(tradeDate);
  }
}

您的代码肯定存在一些与 Lombok 无关的问题。以下部分持有:

  • 您的字段在访问之前未设置。
  • 确实如此,但稍后会被 null 覆盖。
  • 您正在另一个线程上访问它,没有可见性保证。

按照评论中的建议,您应该创建一个 SSCCE。我通常会这样做,而且大多数时候,我会取消我的问题,因为它会引导我找到解决方案。


请注意,编写一个 getter 返回一个与 setter 不可用的类型是一个非常糟糕的主意。