我正在研究一些代码,当对象中的某些内容发生变化时,我想检测这些代码。跟踪更改的最简单方法之一是保留对象的旧副本。但是,看起来像获取深图的副本可能很困难。下面是我的尝试:如何跟踪对象图的更改?
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