Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何制作安全的日期设置器方法_Java_Date - Fatal编程技术网

Java 如何制作安全的日期设置器方法

Java 如何制作安全的日期设置器方法,java,date,Java,Date,如何使日期设置器方法安全。下面的方法正确吗 public void setBirthDate(Date birthDate) { birthDate = (Date)birthDate.clone(); } 谢谢 JaiDate是一种对象类型,但它是可变的,这意味着一旦创建了Date对象,就可以对其进行更改日期类从对象类实现克隆()。所以,最好使用克隆创建setter方法 public void setBirthDate(Date birthDate) { this

如何使日期设置器方法安全。下面的方法正确吗

public void setBirthDate(Date birthDate) {
        birthDate = (Date)birthDate.clone();
}
谢谢
Jai

Date
是一种对象类型,但它是可变的,这意味着一旦创建了
Date
对象,就可以对其进行更改<代码>日期类从对象类实现
克隆()。所以,最好使用克隆创建setter方法

public void setBirthDate(Date birthDate) {  
    this.birthDate = (Date) birthDate.clone();  
}  

public Date getBirthDate() {  
    return (Date) this.birthDate.clone();  
} 

您最好使用
this.birthDate=newdate(birthDate.getTime())
。在这种情况下,您肯定知道会发生什么。

这里有一个
NullPointerException
正在等待发生。我宁愿使用
新日期(birthDate.getTime())
,因为我不太喜欢
clone()
。但是@defaultlocale是对的:NPE就在拐角处,等待着罢工……你称之为安全吗?你只是想要一份深度拷贝?那么这是可以的,但您必须检查null。我建议将其不可变的
DateTime
替换为标准的java
Date
类。您通常应该完全避免
clone()
,请参见此处:不可能…因为没有日期(new Date())constructor@Jai对我注意到了它,因此改为
新日期(birthDate.getTime())