Java中如何對Mutable的Date類採用防禦式拷貝

我們不應該使用Dateclone()方法制作防禦式拷貝的副本,因爲這樣得到的Datenonfinal的,clone()方法並不保證返回一個類爲java.util.Dateobject:它可能返回不受信任的,甚至可被用於惡意用途的子類實例。這樣不受信任的子類可能會在創建實例時在私有靜態列表中記錄對每個實例的引用,並允許攻擊者訪問此列表。

——Effective Java (7th Edition)

 
我們可以考慮用確定的SimpleDateFormatDate轉化爲String,再利用得到的String new一個記錄了相同時間的Date
例如

	public Date getDate() {
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		try {
			return df.parse(df.format(date));
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

其中date是需要Date的一個實例,我們在這個函數裏需要返回它的一個防禦性拷貝。df.format(date)是將Date date依照DateForlmat df轉化爲一個String,而df.parse(String)則是將一個String按照DateForlmat df轉化爲一個Date。通過df.parse(df.format(date))這樣的操作,我們成功得到了一個Date date的防禦性拷貝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章