[英]Get/Set in java and reference
Get / Set方法可以保护我的类字段。
但是由于Java正在使用引用,所以我的私有字段仍然会暴露出来。
例如
private Date d;
Date getDate(){
return d;
}
void setDate(Date inD){
//Checks for inD
d = inD;
}
//Still the issue is
getDate().setHours(xyz);
正确的方法是什么? 因为我不想在不使用setDate的情况下更改日期。
因为我不想在不使用setDate的情况下更改日期。
然后,您不应在get
方法中返回对可变对象的引用。 例如:
private Date d;
Date getDate() {
// Return a reference to an independent copy of the original data
return new Date(d.getTime());
}
void setDate(Date inD) {
// Checks for inD
d = inD;
}
更好的方法(IMO)是为字段使用不可变类型-Joda Time API是一种更简洁的日期/时间库,并且具有很多不可变类型。
现在,这当然只是一个示例-在其他情况下,您可能希望返回一个可变对象的不变视图 (通常您会避免自己发生变异),以避免每次get
调用都需要复制大量数据。
有一种很好的方法称为防御性复制,
Date getDate(){
return new Date(d.getTime());
}
您会得到一份副本,而原始副本不会有任何影响
日期是可变的,因为它是可变的。 为了确保安全,您可以做的就是返回日期的副本。 如果对此进行了修改,则原始值不会更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.