為什麼Date物件被設定成過時了

weixin_34370347發表於2018-01-21

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();
}

複製程式碼

如果您覺得這篇文章幫助到了您,可以給作者一點鼓勵

相關文章