-- Start
重寫 copy 方法有幾點需要注意.
- 重新定義 Oject 類中的 copy方法並將方法從 protected 修改為 public, 將方法的傳回值類型從 Object 修改為具體類型 (在 JDK 1.5 之前, 在覆蓋方法時, 我們不能改變傳回型別, 從 1.5 開始, 我們可以返回子類型).
- 實現 Cloneable 介面. Cloneable 介面中並沒有任何方法, 但是如果不實現 Cloneable 介面, clone 方法會拋出 CloneNotSupportedException 異常. 也許有人會有這樣的疑問, 為什麼不把 clone 方法定義在 Cloneable 介面中, 而是定義在 Object 類中呢? 我猜想這是因為 Java 的實現者想為我們提供 clone 方法的預設實現, 但是預設的實現方式也有致命傷, 那就是只能進行淺拷貝, 我們必須手動對可變對象進行深拷貝.
下面是一個簡單的例子.
class Person implements Cloneable {private String name;private Date birthday;public Person() {}@Overridepublic Person clone() throws CloneNotSupportedException {Person p = (Person) super.clone(); // 使用預設的 clone 方法進行淺拷貝p.birthday = (birthday == null ? null : (Date) birthday.clone()); // 對可變對象進行深拷貝return p;}public String getName() {return name;}public void setName(String name) throws Exception {this.name = name;}public Date getBirthday() {return (Date) birthday.clone(); // 保護性拷貝}public void setBirthday(Date birthday) {this.birthday = birthday;}}
--更多參見:Java 精萃
-- 聲 明:轉載請註明出處
-- Last Updated on 2012-06-12
-- Written by ShangBo on 2012-05-25
-- End