当我们使用Immutable objects库创建不可变类时,如何处理可变成员(例如j.u.Date)?
注意:这是关于Java Date类的而不是,与不可变对象 Java库完全相关,它将生成一些代码!
例:
@Value.Immutable
public interface MyImmutableClass {
Date creationDateTime();
}
有没有一种方法可以覆盖吸气剂,使其返回副本?
public Date creationDateTime() {
return new Date(creationDateTime.getTime());
}
最佳答案
有没有一种方法可以覆盖吸气剂,使其返回副本?
几乎就像您在此处编写的那样:
public Date creationDateTime() {
return new Date(creationDateTime.getTime());
}
(就像上面评论中指出的khelwood一样)。
但是,如果要避免在类内部意外更改
creationDateTime
,请考虑将Millis作为final long
存储:private final creationDateTimeMillis;
public Date creationDateTime() {
return new Date(creationDateTimeMillis);
}
即使
Date.setTime()
是Date
,您也可以调用final
,从而改变了内部状态,但是您无法重新分配creationDateTimeMillis
。