Post date: Oct 29, 2014 6:23:54 AM
Javaの最悪の点としてあげられるのが,ディープコピーが超めんどいということである.
関数の引数が参照渡しになっているのは優れている点だと思っているが,C++みたいに参照渡しと値渡し,両方選べてもいいと思う.
と,鬱々しいことを思っていたら,素晴らしいライブラリと巡りあった.https://code.google.com/p/cloning/
これすげえじゃん!ということで使い方をちょろっと書いておく.
導入
ページ左端のFeatured:Downloadsから新しそうなzipファイルをダウンロード
解凍→cloning-x.x.x.jarと(libファイルの中の)objenesis-x.x.jarを使いたいプログラムのcodeフォルダーにコピー
使い方も簡単.1行のimport文と次の2行書くだけでディープコピーできる.
import com.rits.*;
TekitounaClass a=new TekitounaClass();
Cloner cloner=new Cloner();
TekitounaClass b=cloner.deepClone(a);
実際にディープコピーできているか調べた時に使ったソースを載せておく.
import com.rits.*;
import java.util.*;
void setup(){
ArrayList<A> a=new ArrayList<A>();
a.add(new A(1));
a.add(new A(2));
a.add(new A(3));
Cloner cloner=new Cloner();
ArrayList<A> b=cloner.deepClone(a);
ArrayList<A> c=cloner.deepClone(b);
a.add(new A(4));
b.remove(0);
println(a);
println(b);
println(c);
}
class A{
int a;
A(){
}
A(int a){
this.a=a;
}
String toString(){
return ""+a;
}
}