首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以通过合并对可变对象的引用来公开内部表示形式。

可以通过合并对可变对象的引用来公开内部表示形式。
EN

Stack Overflow用户
提问于 2014-09-11 14:35:32
回答 2查看 8.5K关注 0票数 1

我的代码中有以下内容:但是为什么这会导致声纳错误呢?错误在线:this.lastAccessTime = lastAccessTime;这里的日期已经声明为私有。

代码语言:javascript
复制
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;


    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-11 14:50:55

由于Date是一个可变类型,传递给您Date的代码可以在将它传递给函数/构造函数之后继续修改它。

因此,与其仅仅分配传递给您的Date,不如将其复制一份,以防止这种情况发生:

代码语言:javascript
复制
       this.lastAccessTime = new Date(lastAccessTime.getTime());

乔舒亚·布洛赫在有效Java:第二版中介绍了这一点,作为第39项:在需要时复制防御性副本。

请注意,在对日期进行任何验证之前,您应该复制此副本。

编辑:如下所述,在复制之前应该进行空检查,以防止出现NullPointerException,但其他验证应该在复制后进行。

票数 6
EN

Stack Overflow用户

发布于 2015-01-28 08:36:05

由于java.util.Date是一个可变类型,传递给您java.util.Date的代码可以在将它传递给函数/构造函数之后继续修改它。

考虑将因子分解为不可变类型,即org.joda.time.DateTime

乔舒亚·布洛赫在有效Java:第二版中讨论了这一点,作为第15项:最小化易变性。

注意:看起来你在做一些ORM的事情。贾迪拉可以为hibernate执行到joda类的映射。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25790288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档