当前位置: 首页 > 知识库问答 >
问题:

如何使一个类在java中具有日期字段是不可变的?

乜飞航
2023-03-14

我创建了一个带有日期字段的不可变类。我如何确保即使是日期字段也是不可变的,因为即使您将日期字段设为final,您以后仍然可以为它分配一个不同的值?

共有1个答案

房子昂
2023-03-14

getDate()方法中,返回一个new Date()实例,而不是同一个实例。

public Date getDate() {
    // Not correct.
    return this.date; // This will make your class mutable.

    // Instead use, 
    return new Date(this.date.getTime()); // This will make sure your date field cannot be changed.
}
 类似资料:
  • 我们知道,要创建不可变类,我们需要将一个类声明为final,需要将所有字段声明为final,并且该类中不应该存在任何setter方法。我们需要在构造函数中初始化那些字段。 但是当我们有10多个字段或者更多字段的时候会发生什么呢?我们不能传递构造函数中的所有字段,对吧?在这个场景中,我们如何创建一个不可变的类呢?

  • 本文向大家介绍类在Java中可以具有的变量类型是什么?,包括了类在Java中可以具有的变量类型是什么?的使用技巧和注意事项,需要的朋友参考一下 类在Java中可以具有三种不同类型的变量:局部变量,实例变量和类/静态变量。  局部变量 Java中的局部变量可以在方法,代码块 和构造函数中局部声明。当程序控件输入方法,代码块和构造函数时,将创建局部变量;当程序控件离开方法,代码块和构造函数时,将销毁局

  • 问题内容: 在我们的应用程序中,我们需要具有只能分配一次的字段。 最初,我们想到封装字段并将设置程序设为私有。但是,引起一些问题: 如果没有公共设置者,Hibernate是否仍然可以从数据库映射字段? 我是否可以剥离设置器并使字段仅在实体构造函数中可变? 最后,是否有任何标准的JPA方法使字段不变? 提前致谢。 问题答案: 广告。1:我相信,如果将注释放在字段而不是在getter上,则JPA会将普

  • 问题内容: 为了使一类不变,我可以做的是: 1)将类设为final 2)不提供设置器 3)将所有变量标记为final 但是,如果我的班级有另一个班级的另一个对象,那么somone可以更改该对象的值 问题答案: A)也使不可变 要么 B)不允许直接访问对象,而是仅提供获取器以充当代理。 编辑添加: 您 可以 制作一个深层副本并返回一个副本,而不是原始副本,但这通常不是您在Java中期望的行为类型。

  • 我有两个输入字段fromDate和toDate(都是date)。我使用datepicker作为输入字段fromDate。toDate是只读的,并且依赖于fromDate。也就是说,toDate的日期是6+。例如,如果fromDate是11/30/2014,则toDate是12/6/2014。 我的jsp代码是 和js代码为: 谢谢

  • 问题内容: 来自Java背景,我发现C 的枚举非常la脚。我想知道如何用C 编写类似Java的枚举(枚举值是对象,并且可以具有属性和方法的枚举)。 例如,将以下Java代码(其中一部分足以说明该技术)转换为C ++: 任何帮助将不胜感激! 谢谢! 问题答案: 模拟Java枚举的一种方法是使用私有构造函数创建一个类,该类将自身的副本实例化为静态变量: 然后,您可以使用如下枚举: