tags: Java基礎
為什麼Date物件被設定成過時了?
初期的時候學習Java都會用到Date這麼一個物件,可我們都知道這個物件在書上是不推薦使用的。這是為什麼呢???
由於Java是物件導向的語言,使用一個Date這麼一個物件類描述時間是完全正確的:能夠滿足絕大多數人的需要、還能對其進行擴充套件!
那為什麼我們不使用Date物件來操作時間了呢???因為它設計得不好!
Java物件的設計講求封裝性,而Date類僅僅是用來代表著時間點,操作時間應該由另外的類而負責!但Date物件卻擁有了操作時間的方法。這是不合理的。
- 因此,我們要操作時間的話,往往使用Calendar類或者LocalDate類
Date物件的設計破壞了封裝性!
當我們自定義類,裡面的私有屬性的型別為Date時,比如:
public class A{
private Date hiredate ;
setHiredate(){}
getHiredate(){
return hiredate;
}
}
複製程式碼
當有人需要該類的時間時,我們使用get方法把該成員變數返回出去。這是理所當然的,這是我們的規範。
可是,當外界拿到了我們的Date型別的成員變數時,可以使用Date.setTime()來改變對應的時間。而又因為我們的私有成員變數依賴於Date,因此修改Date的資料就相當於修改了我們的私有成員變數!
也就是說,外界拿到Date物件就可以修改我們私有成員變數的值了。並不是通過我們給出的介面來進行修改。這樣就嚴重破壞了封裝性!
當然了,我們是可以有另外的辦法來對其補救的:
- 在返回Date物件的時候,我們返回一個拷貝,而不是把原本物件返回出去
- 這樣做的話,我們就無需擔心外界通過Date物件從而操作我們的私有變數了。
getHiredate(){
return (Date)hiredate.clone();
}
複製程式碼
如果您覺得這篇文章幫助到了您,可以給作者一點鼓勵