栗子現場直播 千篇一栗
有很多簡單的道理,若不是被遺忘,不是察覺不到,就是知易行難。

2009年2月17日 星期二

Deep operation

  之前說過在 Java 上進行 deep-equals deep-clone deep-compare 的構想,現在就說說其有可能引申的問題。

  第一個是 loop 爆的問題。

class AAA{
public AAA v;
static public void bad_func(){
AAA a=new AAA();
a.v=a;
deepOpt(a); // dead loop
}
}


  如果程式只是掃 AAA 的結構而進行呆 clone ,就會出現一個問題。 bad_func 將會 loop 爆。

  另,由於所有東東都是 Object ,於是在 Object[] ,也有相似的情況。

Object[] a=new Object[1];
a[0]=a;
deepOpt(a); // dead loop


  第二個是 same 的問題。

a0.v0=new B();
a0.v1=a0.v0;
// a0.v0==a0.v1
a1=deepClone(a0);
// a1.v0!=a1.v1


  幸好兩個都不是大問題。

  另,網上有建議使用 Serialize 來做 deep-clone 。這個方法我試過,很有效,也能避免以上的兩個問題。但要建立一個長長的 byte[] 來做暫時的儲存。另,不能做 equals 及 compare 。

沒有留言: