簡體   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