返回日期或日历字段

3 java gwt date

Netbeans抱怨这个代码出现在IDEA Code Inspections List上.

 public Date getStartDate()
 {
    return theStartDate;
 }
Run Code Online (Sandbox Code Playgroud)

IDEA网站说:

此检查报告从方法返回java.lang.Date或java.lang.Calendar字段的任何尝试.由于Date或Calendar通常被视为不可变值但实际上是可变的,因此该构造可能导致对象的状态被意外修改.虽然偶尔因性能原因而有用,但这种结构本质上容易出错.

我怎么回事Date

Joh*_*nyO 9

您应该最有可能返回有问题的值的副本,而不是当前的对象,以避免无意的修改

最简单的可能是
return new Date(theStartDate.getTime());

这是因为java.util.Date是一个可变对象,并且您希望避免来自调用者的错误或恶意执行以下操作的问题:

yourObject.getStartDate().setTime(0);
Run Code Online (Sandbox Code Playgroud)

如果您进行上述更改,则上述声明将变为无害.

为什么复制构造函数而不是克隆mehod?请参见此处: java.util.Date克隆或复制以不公开内部引用

请注意,在每次调用方法时都会产生新对象的性能损失,因此请谨慎使用.