effective java中的第 39个话题,大概说的就是这个意思,应该很容易明白
public class DataTest {
private final Date start;
private final Date end;
public DataTest(Date start, Date end) {
if(start.compareTo(end) > 0){
throw new IllegalArgumentException("时间不对");
}
this.start = start;
this.end = end;
}
public Date getStart() {
return start;
}
public Date getEnd() {
return end;
}
public static void main(String[] args) throws InterruptedException {
Date start = new Date();
Thread.sleep(2);
Date end = new Date();
DataTest dataTest = new DataTest(start, end);
System.out.println(dataTest.getStart().getTime());
System.out.println(dataTest.getEnd().getTime());
//第一种风险,修改start的属性值
start.setYear(2022);
System.out.println(dataTest.getStart().getTime());
System.out.println(dataTest.getEnd().getTime());
//第二种风险
dataTest.getStart().setYear(2022);
System.out.println(dataTest.getStart().getTime());
System.out.println(dataTest.getEnd().getTime());
}
}
应对第一种风险,解决修改构造方法
public DataTest(Date start, Date end) {
if(start.compareTo(end) > 0){
throw new IllegalArgumentException("时间不对");
}
this.start = new Date(start.getTime());
this.end = new Date(end.getTime());
}
应对第二种风险,解决修改get方法
public Date getStart() {
return new Date(start.getTime());
}
public Date getEnd() {
return new Date(end.getTime());
}