我正在研究一些代碼,當對象中的某些內容發生變化時,我想檢測這些代碼。跟蹤更改的最簡單方法之一是保留對象的舊副本。但是,看起來像獲取深圖的副本可能很困難。下面是我的嘗試:如何跟蹤對象圖的更改?
public class Old{
protected Old old;
protected List stuff;
//Needed for JUnit
public Old(){
}
public Old(List stuff){
this.stuff=stuff;
old=this;
}
public void add(){
stuff.add(2);
}
public void match(){
System.out.printf("old:%d\nnew:%d\n",old.getStuff().size(),stuff.size());
}
public List getStuff(){
return new ArrayList(stuff);
}
@Test
public void testOld(){
List list=new ArrayList();
list.add(1);
Old thing=new Old(list);
thing.add();
thing.match();
}
}
輸出:
old:2 new:2
因此,它似乎在默認情況下old=this
不創建一個深拷貝。我真正想要的是跟蹤對該列表的更改以及潛在的對象圖。什麼是其他一些簡單的選擇?
要跟蹤列表的變化,您可以使用此開源庫: http://www.fuin.org/utils4j/examples/track-list-changes.html – user1672934