java.util.Date 克隆或复制以不暴露内部引用

标签 java clone

最好不要暴露对象(实体)的内部引用。因此,如果一个对象有一个 java.util.Date 类型的字段,那么例如该字段的 getter 应该返回的不是原始日期而是它的副本。

但是对于 java.util.Date 有两种常见的方法来创建该副本:

  • 克隆:(Date) originalDate.clone()
  • 通过构造函数复制new Date(originalDate.getTime())

我的问题是,哪种方式更好,为什么?

最佳答案

如果它肯定只是一个 Date,那么无论哪种方式都不会有任何区别。

如果实际对象可能是 Date子类(例如 java.sql.Date),那么我希望 clone() 将保留额外信息(包括它是哪个类),而调用构造函数则不会。

顺便说一句,如果您使用了 Joda Time你不会有这个问题,因为有很多不可变的类型可供使用。它也是一个更好的 API :)

关于java.util.Date 克隆或复制以不暴露内部引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7082553/

相关文章:

使用 100% 单 CPU 内核的 Java Web 应用程序

c# - MemoryStream 和深度克隆

android - 以编程方式克隆 Android 应用程序

git - 克隆密码中带有斜线的存储库

java - 打开示例项目上的 Liberty 日志配置异常

java - 扫描仪类没有这样的元素异常(exception)

git - 无效 : is this a git repository?

java - 覆盖克隆时处理最终字段

java - Camera2API : Session has been closed; further changes are illegal

java - 在 Java 中通过 Maps.newHashMapWithExpectedSize(...) 限制 Map 的大小会导致冲突