Object#clone() で行われている小細工

忘れないうちに細かいことについて言及。

cloneについては、別にJavaで書けるんじゃ無いかと思う。return new Object()で良いんじゃないかと思う、中身空なんだから。

http://nazakki.blogspot.com/2009/03/object.html

実は無理。こんなプログラムが書けて、そして正常に動作したりします。

class Sample implements Cloneable {
    private int value;

    private Sample(int value) {
        this.value = value;
    }

// clone 自体は Object#clone を使用する
//  protected Object clone() throws CloneNotSupportedException {
//      return super.clone();
//  }

    public static void main(String[] args) throws Exception {
        Sample obj01 = new Sample(123);
        Sample obj02 = (Sample) obj01.clone();
        obj01.value = 456;
        System.out.println(obj01.value);    // -> 456
        System.out.println(obj02.value);    // -> 123
    }
}

これと似たような動作を考えるならばシリアル化が考え付きますが、今回は Serializable 付けてないのでシリアル化できません。ということで java 単体で実装するのは無理そうだったりします。
ちなみに上記プログラムにおいて Sample(int value) が呼び出されるのは1回だけです。念のため。