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() + "]";
}
}
答案 0 :(得分:6)
您的课程实例本身无法更改,但由于Date
是可变的(假设它是java.util.Date
),因此可以更改其中的信息。
例如:
myTest.getDate().setTime(0L);
如果你想防范这种情况,你需要防御性地复制Date
。
public Test(Date d) {
this.date = new Date(d.getTime());
}
public Date getDate() {
return new Date(this.date.getTime());
}
这样,班级外的任何人都无法访问您的date
字段来改变它。
或者,使用不可变日期类型,例如LocalDate
或LocalDateTime
,而不是可变日期类型。
答案 1 :(得分:0)
返回日期对象的克隆。
public final class Test {
private final Date date;
public Test() {
date = new Date();
}
public Test(Date date) {
this.date = (Date)date.clone();
}
public Date getDate() {
return (Date)date.clone();
}
public String toString() {
return "Test:[date=" + date.toString() + "]";
}
}
如果您对创建新对象有性能问题,则可以将时间存储为long
而不是Date
对象。