java - Spring setters/getters 和可变变量

标签 java hibernate spring spring-mvc mutable

让我们提议我有以下类(class)

    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 Framework 使用可变的 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 对象中的 date 变量的值,它可能是系统错误的主要根源。

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

最佳答案

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

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

上面的解决方案是使用joda-timeDateTime对象,它是不可变的。

关于java - Spring setters/getters 和可变变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117208/

相关文章:

java - 单击 html 元素时如何从 jsp 调用 java 方法?

Java Hibernate java.lang.IllegalArgumentException : Unknown parameter position: 1

java - org.hibernate.internal.util.config.ConfigurationException : Could not locate cfg. xml 资源 [/HibernateTest/src/hibernate.cfg.xml]

spring - 如何解决 Spring Boot Post 请求中的 403 错误

spring - 自定义 Spring Security 注销过滤器

java - 有什么方法可以使用反射访问 Java 中匿名类的编译器编号?

java - 如何将 JSON 数组存储在 JSON 数组结果中并显示在 ListView 中?

java - hibernate 异常: identifier of an instance of X was altered when trying to merge object

java - 为什么我的hibernate4 session.save()只能调用一次,不能连续调用

java - Gradle:类路径和编译依赖有什么区别?