正如以下代码中的问题所述
public Date getSomeDate() {
return someDate;
}
会给你findbug错误 问题。
建议的解决方案是在getter和setter中复制Date对象
public Date getSomeDate() {
return new Date(someDate.getTime());
}
这是一个很好的方法还是有其他方法可以做到这一点?
在Java中是否有可以解决此问题的任何不可变日期库?
正如以下代码中的问题所述
public Date getSomeDate() {
return someDate;
}
会给你findbug错误 问题。
建议的解决方案是在getter和setter中复制Date对象
public Date getSomeDate() {
return new Date(someDate.getTime());
}
这是一个很好的方法还是有其他方法可以做到这一点?
在Java中是否有可以解决此问题的任何不可变日期库?
JodaTime 有不可变的日期。
当然,可以使用 Date
吸气器中的构造函数,为什么不呢?
也就是说,仅仅因为FindBugs将可变状态视为潜在错误,并不意味着它本质上值得关注 - 这取决于该类的使用方式。不变性消除了一种类型的错误,您可能需要或可能不需要太多关注。
关注人......
除了适应getter和setter之外,还需要注意空值:
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());
}
}
根据您的使用情况,您可以返回 someDate.getTime()
没有包装它 Date
。
等一下......复制内的对象 getSomeDate
和 setSomeDate
方法我们没有消除安全风险,因为更改的对象通过 setSomeDate
和副本保留更改的值。有必要删除 setSomeDate
为了解决这种安全问题,或者根本不用担心它。