帮助克隆日期的方法?

时间:2016-06-09 14:42:56

标签: java

声纳说mutable members should not be stored or returned directly

  

可变对象是那些状态可以改变的对象。例如,数组是可变的,但String不是。永远不应将可变类成员返回给调用者或直接接受和存储。这样做会使您容易受到类状态的意外更改。

     

相反,应该制作一个可变对象的副本,以及该副本   应该存储或退回。

     

此规则检查未存储数组,集合和日期或   直接回来。

我试图存储一个日期。为了解决声纳警报,我创建了两个辅助方法来返回原始日期的副本。

示例A:

public static Date clone(Date originalDate) {
    if(date != null) {
        return new Date(originalDate.getTime());
    }
    return null;
}

例B:

public static Date clone(Date originalDate) {
    if (date != null) {
        return  (Date)originalDate.clone();
    }
    return null;    
}

如果我使用构造函数方式(示例A),则会丢失包含原始日期的可能的额外信息。

我应该使用构造函数(示例A)还是使用clone(示例B)复制originalDate?

1 个答案:

答案 0 :(得分:3)

  

我应该使用构造函数(示例A)还是使用clone(示例B)复制originalDate?

选择更具可读性的方式。例如A。

然而Ternary Operator在这里有用。

你可能想看看这里:Clone() vs Copy constructor- which is recommended in java