当前位置: 首页 > 面试题库 >

java.util.Date克隆或复制以不公开内部引用

何博涛
2023-03-14
问题内容

最佳实践是不公开对象(实体)的内部引用。
因此,如果一个对象具有一个类型的字段,java.util.Date那么例如该字段的获取程序应返回的不是原始日期,而是它的副本。

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

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

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


问题答案:

如果绝对是a Date,那么这两种方法都不会有任何区别。

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

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



 类似资料:
  • 本文向大家介绍如何复制或克隆Java ArrayList?,包括了如何复制或克隆Java ArrayList?的使用技巧和注意事项,需要的朋友参考一下  java.util.ArrayList类的 clone()方法返回此ArrayList实例的浅表副本(即,不复制元素本身)。使用此方法,可以将一个数组列表的内容复制到另一个数组列表。 示例 输出结果

  • 我想在POI中使用OPCPackage和XSSFWorkbook打开一个excel文件。由于这个文件将在不同的线程中使用,我想避免重新打开该文件以节省时间(POI在打开一个xlsx文件时速度较慢)。所以我所做的是将工作簿保存在一个全局变量中,然后线程将访问这个全局变量并重用对象。 我遇到的问题是当我尝试重用对象时,它影响/修改了excel文件的原始数据。

  • 问题 你想复制一个对象,包含其所有子对象。 解决方案 clone = (obj) -> if not obj? or typeof obj isnt 'object' return obj if obj instanceof Date return new Date(obj.getTime()) if obj instanceof RegExp flags

  • 问题内容: 您能告诉我Java克隆是什么意思吗?什么是深层复制和浅层复制,请举例说明 问题答案: 我强烈建议阅读有效的Java第二版中的第11项

  • 本文向大家介绍浅析C#的复制和克隆,包括了浅析C#的复制和克隆的使用技巧和注意事项,需要的朋友参考一下 本文浅析了C#的复制和克隆技术,对于有需要的朋友可以参考下。 在C#中,用HashTable,DataTable等实现复制和克隆,下面直接看例子: 以上代码能调试通过,但是问题又来了,当我们修改了ht2中了的键值之后,发现ht中的键值也修改了,显然这不是我想要的结果,然后略微思考,用了Clone

  • Threejs大多数对象都有克隆.clone()和复制.copy()两个方法,点模型Points、线模型Line、网格网格模型Mesh一样具有这两个方法。 复制方法.copy() A.copy(B)表示B属性的值赋值给A对应属性。 var p1 = new THREE.Vector3(1.2,2.6,3.2); var p2 = new THREE.Vector3(0.0,0.0,0.0); p2