编程语言
首页 > 编程语言> > java-不可变中的可变项

java-不可变中的可变项

作者:互联网

当我们使用Immutable objects库创建不可变类时,如何处理可变成员(例如j.u.Date)?

注意:这与java Date类无关,并且与Immutable Objects java库完全相关,后者会生成一些代码!

例:

@Value.Immutable
public interface MyImmutableClass {
    Date creationDateTime();
}

有没有一种方法可以覆盖吸气剂,使其返回副本?

public Date creationDateTime() {
    return new Date(creationDateTime.getTime());
}

解决方法:

Is there a way to override the getter, so that it returns a copy?

就像您在此处编写的一样:

public Date creationDateTime() {
    return new Date(creationDateTime.getTime());
}

(如上述评论中指出的khelwood).

但是,如果要避免在类内部意外破坏creationDateTime,请考虑将Millis作为最后的long存储:

private final creationDateTimeMillis;

public Date creationDateTime() {
    return new Date(creationDateTimeMillis);
}

尽管即使Date是最终的,您也可以调用Date.setTime(),从而使内部状态发生变化,但是您无法重新分配creationDateTimeMillis.

标签:immutability,java,immutables-library
来源: https://codeday.me/bug/20191111/2021658.html