可变日期 class 修复

Mutable Date class fix

我只是想知道使下面的代码不可变的正确方法是什么。

Date d = new Date();
Scheduler.scheduleTask(task1, d);
d.setTime(d.getTime() + ONE_DAY);
Scheduler.scheduleTask(task2, d);

你不能让它不可变。不变性是对象的属性。它说,一旦实例化,对象的内部状态就不会改变。

java.util.Date class,无论出于何种原因,并非设计为不可变的。更改它包含的值的能力很好地说明了这一点:

d.setTime(d.getTime() + ONE_DAY);

如果您想更改您的代码,使其不改变这个对象,您可以这样做:

Date firstDate = new Date();
Scheduler.scheduleTask(task1, firstDate);
Date secondDate = new Date(firstDate.getTime() + ONE_DAY);
Scheduler.scheduleTask(task2, secondDate);

如果可以避免,请不要使用java.util.Date。在 java.time 中的 Java 8 中添加了一个 new Date/Time API。位于其中的 classes 是不可变的,通常是更好的选择。

日期对象实现了克隆方法,因此您可以克隆您的日期 (d) 对象而不是进行引用。在你的例子中是这样的:

Date d = new Date();
Scheduler.scheduleTask(task1, (Date) d.clone());
d.setTime(d.getTime() + ONE_DAY);
Scheduler.scheduleTask(task2, (Date) d.clone());