首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

使類別具備複製能力:protected 技巧與 Cloneable 介面雙重機制

     編輯:Java 相關知識

雖 clone() 定義於 Object,但預設不自動啟用。Java 採「反其道而行」:必須主動加入代碼才能複製。

1. protected 技巧

為避免所有類別預設可複製,Object.clone() 設為 protected。後果:

  • 客戶端程式設計師無法直接呼叫(編譯錯誤)
  • 無法透過基類參考多型呼叫 clone()
  • 編譯期即告知物件不可複製

Java 庫中多數類別不可複製(如 Integer)。

但在衍生類中可存取 Object.clone()(protected 允許繼承體系存取)。基類 clone() 提供真正「位元複製」功能,相當於標準複製行為。但必須將自己的 clone() 設為 public 才能被外部使用。複製兩大鐵律:幾乎必呼叫 super.clone(),且必設為 public。

protected 技巧僅用一次:首次從不可複製類別繼承並想開啟複製能力。之後所有衍生類自動擁有 clone()(public 不會在繼承中縮小存取範圍),除非用特殊機制「關閉」。

2. 實作 Cloneable 介面

還需實作 Cloneable 介面——它是空介面:

interface Cloneable {}

非為了向上造型呼叫方法,而是作為標記封裝於類別型別中。兩大原因:

  1. 向上造型參考時,可用 instanceof Cloneable 檢查是否可複製
  2. Object.clone() 執行期驗證:未實作 Cloneable 則拋出 CloneNotSupportedException

一般情況下,implements Cloneable 是支援複製的必要條件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved