The HIRO Says

If you smell what The HIRO is cooking!!!

clone() メソッドの実装(2)−オブジェクトの複製テクニック

前回で触れたように、clone() メソッドには、仕様が特殊で実装し辛いという問題があります。
オブジェクトをコピーしたいだけなのに…(´・ω・)という人のために、clone() メソッド以外でオブジェクトを複製するテクニックを紹介します。


テクニック(1)−コピーコンストラク

このテクニックは、コンストラクタの引数に同クラスのオブジェクトを指定できるようにして、引数の値を新しいインスタンスへ複製するという方法です。

    public ComplicateObject(ComplicateObject original) {

        this();

        this.booleanValue = original.booleanValue;
        this.byteValue    = original.byteValue;
        this.charValue    = original.charValue;
        this.shortValue   = original.shortValue;
        this.intValue     = original.intValue;
        this.longValue    = original.longValue;
        this.floatValue   = original.floatValue;
        this.doubleValue  = original.doubleValue;
        this.stringValue  = original.stringValue;
        this.dateValue    = original.dateValue;
    }

テクニック(2)−コピーファクトリ

このテクニックは、コピーコンストラクタと同様ですが、public かつ static なファクトリメソッドを使っている点が違っています。

    public static ComplicateObject getInstance(ComplicateObject original) {

        ComplicateObject copy = new ComplicateObject();

        copy.booleanValue = original.booleanValue;
        copy.byteValue    = original.byteValue;
        copy.charValue    = original.charValue;
        copy.shortValue   = original.shortValue;
        copy.intValue     = original.intValue;
        copy.longValue    = original.longValue;
        copy.floatValue   = original.floatValue;
        copy.doubleValue  = original.doubleValue;
        copy.stringValue  = original.stringValue;
        copy.dateValue    = original.dateValue;

        return copy;
    }