想法一
直接使用final对Date的对象进行修饰。
但是Date是对象数据类型(Object types),当我们对这样的数据类型用final修饰时,它引用的对象是不能改变的,但是它指向的对象的值是可以改变的。
final Date date = new Date();
date.setYear(2021); // allowed!
上面代码是合法的,我们尽管使用了final来修饰Date类型的date对象,我们依然可以调用setYear方法来修改date里有关年份的属性。
想法二
写一个自己的MyDate类,在这个类中,实现Date类的基本功能,但是一切可能改变对象值的方法都不应该再出现(例如上面提到的setYear方法)。其实本质上就是在新的类里创建了一个Date类型的private对象,然后将需要实现的方法委托(Delegation)给Date类。
import java.util.Date;
public class MyDate {
private Date date;
public MyDate() {
date = new Date();
}
public MyDate(long time) {
date = new Date(time);
}
public boolean after(MyDate when) {
return date.after(when.date);
}
public boolean before(Mydate when) {
return date.before(when.date);
}
// ...
}