-2 java immutability
public final class Test {
private final Date date;
public Test() {
date = new Date();
}
public Test(Date date) {
this.date = date;
}
public Date getDate() {
return date;
}
public String toString() {
return "Test:[date=" + date.toString() + "]";
}
}
Run Code Online (Sandbox Code Playgroud)
你的类的实例本身不能改变,但由于它Date是可变的(假设它是java.util.Date),它们内部的信息可以改变.
例如:
myTest.getDate().setTime(0L);
Run Code Online (Sandbox Code Playgroud)
如果你想要防范这一点,你需要Date防御性地复制.
public Test(Date d) {
this.date = new Date(d.getTime());
}
public Date getDate() {
return new Date(this.date.getTime());
}
Run Code Online (Sandbox Code Playgroud)
这样,课外的任何东西都无法访问你的date领域来改变它.
或者,使用不可变日期类型,例如LocalDate或LocalDateTime代替可变日期类型.
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |