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