重寫 copy 方法

來源:互聯網
上載者:User

-- 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.