声纳说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?
答案 0 :(得分:3)
我应该使用构造函数(示例A)还是使用clone(示例B)复制originalDate?
选择更具可读性的方式。例如A。
然而Ternary Operator在这里有用。
你可能想看看这里:Clone() vs Copy constructor- which is recommended in java