java中的Get/Set和引用

java中的Get/Set和引用,java,Java,Get/Set方法用于保护我的类字段 但是,由于Java使用的是引用,我的私有字段仍然被公开 e、 g 正确的方法是什么?因为我不想在不使用setDate的情况下更改日期。日期是可恶的,因为它是可变的。为了安全起见,你能做的就是返回日期的副本。如果对其进行修改,则原始值不会更改。日期是可憎的,因为它是可变的。为了安全起见,你能做的就是返回日期的副本。如果修改了该值,则不会更改原始值 因为我不想在不使用setDate的情况下更改日期 然后,您不应该在get方法中返回对可变对象的引用。例如: pri

Get/Set方法用于保护我的类字段

但是,由于Java使用的是引用,我的私有字段仍然被公开

e、 g


正确的方法是什么?因为我不想在不使用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)是为字段使用不可变类型——API是一个更干净的日期/时间库,它有很多不可变类型

当然,这只是一个例子——在其他情况下,您可能希望在可变对象上返回一个不可变的视图(您通常会避免自己发生变化),以避免在每次
get
调用中复制大量数据

因为我不想在不使用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)是为字段使用不可变类型——API是一个更干净的日期/时间库,它有很多不可变类型


当然,这只是一个例子——在其他情况下,您可能希望在可变对象上返回一个不可变的视图(您通常会避免自己发生变异),以避免在每次
get
调用中复制大量数据。

有一种很好的方法称为防御性复制

Date getDate(){
   return new Date(d.getTime());
}

你会得到一份副本,而原件不会有任何影响

有一种很好的方法称为防御性副本

Date getDate(){
   return new Date(d.getTime());
}

您将获得一份副本,而原始副本将不会产生任何影响

您能解释一下“不可变视图”吗?如果可能的话,我想返回一个常量引用。与公共最终日期getDate()类似,返回新日期(d.getTime());-请解释一下,我不明白,get方法如何帮助不改变原始值???@sethi:不,Java中没有“const引用”这样的概念。在方法声明上使用
final
,意味着无法重写该方法。对于“不可变视图”,我指的是一个将只读访问权委托给另一个对象的对象,但不允许任何变异。@gowtham:这将返回一个与原始对象相等的
日期,但它是一个独立的对象。@JonSkeet ya但这有助于不更改原始值,这是get方法,我们使用setter设置值,我真的不明白,请你解释一下“不变的观点”好吗?如果可能的话,我想返回一个常量引用。与公共最终日期getDate()类似,返回新日期(d.getTime());-请解释一下,我不明白,get方法如何帮助不改变原始值???@sethi:不,Java中没有“const引用”这样的概念。在方法声明上使用
final
,意味着无法重写该方法。对于“不可变视图”,我指的是一个将只读访问权委托给另一个对象的对象,但不允许任何变异。@gowtham:这将返回一个与原始对象相等的
日期,但它是一个独立的对象。@JonSkeet ya但这有助于不更改原始值,这是get方法,我们使用setter设置值,我真的不明白,请解释一下