ネイティブ Java クローナブル インターフェイス

JavaのCloneableインタフェースは、対象のインタフェースを実装したクラスで、オブジェクトのクローン(複製)操作を行うことができることを示すマーカーインタフェースです。

  1. マーカーインタフェース:Cloneableインタフェースそれ自体はメソッドを定義しませんが、インタフェースを実装したクラスがクローン操作を使用できることをコンパイラに示すマーカーインタフェースです。このようなインタフェースは普通メソッドを実装する必要はなく、インタフェースを実装したことを宣言するだけです。
  2. Cloneableインターフェイスを実装したクラスは、Objectクラスのclone()メソッドをオーバーライドする必要があります。このメソッドは、オブジェクトのすべての属性値を含む、元のオブジェクトと同じ新しいオブジェクトを作成して戻すために使用されます。クローニング操作には、シャローコピーとディープコピーの2つの方法があります。
  3. オブジェクトクラスのclone()メソッドは、デフォルトでシャローコピーを実装します。シャローコピーは、対象オブジェクト自体と、そのオブジェクト内に含まれる基本データ型データメンバーのみをコピーします。参照型データメンバーについては、実際のオブジェクトではなく、参照のみがコピーされます。つまり、クローンオブジェクトと元のオブジェクトは、参照型データメンバーが参照する同一のオブジェクトを共有することになります。この共有オブジェクトが変更されると、クローンオブジェクトと元のオブジェクトの両方に影響が出ます。
  4. ディープクローン:ディープクローンを実現する場合、すなわち参照型のメンバー変数が指し示しているオブジェクトをクローンオブジェクトと元のオブジェクトで共有しないようにする場合、clone()メソッドをオーバーライドするときに適切な処理を行う必要があります。一般的な方法は、シリアライズとデシリアライズを利用してディープクローンを実現します。これは、オブジェクトをバイトストリームにシリアライズしてから、それを新しいオブジェクトにデシリアライズすることで、オブジェクトのディープコピーを作成します。

クローン可能なインターフェースはオブジェクトのクローン処理に対する防御手段を何も提供しないことに注意してください。クローン可能なインターフェースを実装したクラスは、オブジェクトのクローン、浅いクローンか深いクローンかを自由に実行できます。従って、クローン可能なインターフェースを使用してオブジェクトのクローンを行う際は、予期せぬ問題が発生しないよう、クローンされるオブジェクトの属性を正しく処理することを覚えておいてください。

bannerAds