Findbugs问题是Java中Date对象的可变性

Man*_*uPK 11 java coding-style findbugs

这更像是问题12的后续行动.

正如以下代码中的问题所述

public Date getSomeDate() {
   return someDate;
}
Run Code Online (Sandbox Code Playgroud)

会给你findbug错误问题.

建议的解决方案是在getter和setter中复制Date对象

public Date getSomeDate() {
  return new Date(someDate.getTime());
} 
Run Code Online (Sandbox Code Playgroud)

这是一个好方法还是有其他替代方法?

在Java中是否有可以解决此问题的任何不可变日期库?

小智 7

关注人......

除了适应getter和setter之外,还需要注意null值:

public Date getSomeDate() {
  if (this.someDate == null) {
    return null;
  }
  return new Date(this.someDate.getTime());
}

public void setSomeDate(final Date someDate) {
  if (someDate == null) {
    this.someDate = null;
  } else{
  this.someDate = new Date(someDate.getTime());
  }
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*ton 6

JodaTime有不可变日期.

当然,Date在getter中使用构造函数是可以的,为什么不呢?

也就是说,仅仅因为FindBugs将可变状态视为潜在错误,并不意味着它本质上值得关注 - 这取决于该类的使用方式.不可变性消除了一种类型的错误,您可能需要或可能不需要关心它.