当我们使用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

10-06 15:52