XStreamを利用して簡単にディープコピー

XStreamで書き出し→読み込みすれば、どんなオブジェクトでもディープコピーできるんだなあ。

import com.thoughtworks.xstream.XStream;

public class CopyUtils {
    public static <T> T deepCopy(T obj) {
        XStream xs = new XStream();
        return (T) xs.fromXML(xs.toXML(obj));
    }
}

XStreamなら、対象のオブジェクトがSerializableを実装していなくても書き出せるのがポイントですね。