Findbugs 在我的代码中报告了很多 EI_EXPOSE_REP 和 EI_EXPOSE_REP2 错误,每次我这样编写 getter 和 setter 时:
public Date getDate() {
return date;
}
public void setDate(final Date date) {
this.date = date;
}
我理解报告的含义,我不应该将我的对象的内部引用暴露给外界,以免它们被恶意/错误代码修改。解决方法是:
public Date getDate() {
return date == null ? null : date.clone();
}
public void setDate(Date date) {
this.date = date == null ? null : date.clone();
}
我的问题不在这里。我很惊讶这份报告涉及 ALWAYS Date。为什么不是所有其他可变对象?我认为这个报告也适用于所有可变对象,不是吗?
我是否应该将此“良好实践”扩展到所有处理可变对象的访问器?
给我你的建议,谢谢