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