-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 次 |
最近记录: |