広告

Java : Cloneable (複製) - API使用例

Cloneable (Java SE 20 & JDK 20) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

クラスがCloneableインタフェースを実装することで、Object.clone()メソッドがそのクラスのフィールドからフィールドへとコピーしたインスタンスを作成することができることを表します。

クラス構成

Cloneableインタフェースは、複製(clone)が可能であることを表します。
インタフェース自体には、メソッドもフィールドもありません。

Cloneable を実装したクラスは、Object.clone による複製が可能となります。

record Sample(int num, String str) implements Cloneable {
    @Override
    public Sample clone() throws CloneNotSupportedException {
        return (Sample) super.clone();
    }
}

try {
    final var sample = new Sample(100, "abc");
    final var cloned = sample.clone();

    System.out.println("Cloned! : " + cloned);

} catch (CloneNotSupportedException e) {
    System.out.println("CloneNotSupportedException!");
}

// 結果
// ↓
//Cloned! : Sample[num=100, str=abc]

Cloneable を実装していないクラスは、Object.clone を呼び出すと CloneNotSupportedException が発生します。

// implements Cloneable なしです。
record Sample(int num, String str) {
    @Override
    public Sample clone() throws CloneNotSupportedException {
        return (Sample) super.clone();
    }
}

try {
    final var sample = new Sample(100, "abc");
    final var cloned = sample.clone();

    System.out.println("Cloned! : " + cloned);

} catch (CloneNotSupportedException e) {
    System.out.println("CloneNotSupportedException!");
}

// 結果
// ↓
//CloneNotSupportedException!

関連記事

ページの先頭へ