代码之家  ›  专栏  ›  技术社区  ›  danny.lesnik

Spring setters/getter和可变变量

  •  2
  • danny.lesnik  · 技术社区  · 15 年前

        Public MyClass{
    
        Date date;
    
        //Mutable getters and setters
    
        public Date getdate(){
        retrurn date;
        }
    
        public Date setdate(Date date)
        {date = date;}
    
        //Now immutable setter and Getters 
    
        public Date getImmutableDate{
        return new Date(date.getDate());
        }
    
        public void setImmutableDate(Date mydate)
        {
        date = new Date(mydate.getDate());
        }
     }
    

    在Spring或Hibernate框架中使用可变的getter和setter,在我的自定义代码中使用可变的setter和getter,这是一个好的实践吗。我担心的是:

    MyClass myclass = new MyClass();
    //assuming that item date was initalized some how.
    Date currentDate = myClass.getdate();
    currentDate.setMonth( currentDate.getMonth() + 1 );
    

    现在发生的事情是,我刚刚更改了myClass对象中日期变量的值,它可能是系统中bug的主要根源。

    我说的对吗? 我也可以在Spring/Hibernate中使用不可变的getter和setter吗?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Bozho    15 年前

    注意,如果您提供一个可变的setter和getter,它最终将被人们使用。所以这不是一个好的选择。

    这个问题与spring和hibernate并不是特别相关,而是更多地与API设计相关。Josh Bloch建议“最小化易变性”。但这意味着您应该使用不可变对象,而不是每次获取对象时都创建实例。

    joda-time DateTime 对象,它是不可变的。

    推荐文章