最好不要暴露对象(实体)的内部引用。因此,如果一个对象有一个 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/