繁体   English   中英

在Java中获取/设置和引用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM