我的代码中有以下内容:但是为什么这会导致声纳错误呢?错误在线:this.lastAccessTime = lastAccessTime;这里的日期已经声明为私有。
public class myClass{
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_ACCESS_TIME", nullable = false)
private Date lastAccessTime;
/**
* Constructor
*
* @param userId the user id
* @param screenName the name of screen
* @param lastAccessTime time of last access
*/
public userTO(String userId, String screenName, Date lastAccessTime)
{
this.userId = userId;
this.screenName = screenName;
this.lastAccessTime = lastAccessTime;
}
}发布于 2014-09-11 14:50:55
由于Date是一个可变类型,传递给您Date的代码可以在将它传递给函数/构造函数之后继续修改它。
因此,与其仅仅分配传递给您的Date,不如将其复制一份,以防止这种情况发生:
this.lastAccessTime = new Date(lastAccessTime.getTime());乔舒亚·布洛赫在有效Java:第二版中介绍了这一点,作为第39项:在需要时复制防御性副本。
请注意,在对日期进行任何验证之前,您应该复制此副本。
编辑:如下所述,在复制之前应该进行空检查,以防止出现NullPointerException,但其他验证应该在复制后进行。
发布于 2015-01-28 08:36:05
由于java.util.Date是一个可变类型,传递给您java.util.Date的代码可以在将它传递给函数/构造函数之后继续修改它。
考虑将因子分解为不可变类型,即org.joda.time.DateTime。
乔舒亚·布洛赫在有效Java:第二版中讨论了这一点,作为第15项:最小化易变性。
注意:看起来你在做一些ORM的事情。贾迪拉可以为hibernate执行到joda类的映射。
https://stackoverflow.com/questions/25790288
复制相似问题