Java EasyMock捕获可变参数(集合)
我正在使用EasyMock.capture捕获传递给函数的集合。但这个集合是可变的Java EasyMock捕获可变参数(集合),java,java-8,easymock,Java,Java 8,Easymock,我正在使用EasyMock.capture捕获传递给函数的集合。但这个集合是可变的 因此,如果以后函数foo修改集合,它也会反映在EasyMock捕获的值中。这是一种迫使EasyMock克隆收藏而不是仅仅保留引用的方法吗 现在没有办法用Easymock来管理这样的中间捕获 但是,您可以创建自己的捕获类型来实现这一点 以下是一些让您开始学习的内容: public class DefensiveCopyCapture<T> extends Capture<T> {
因此,如果以后函数foo修改集合,它也会反映在EasyMock捕获的值中。这是一种迫使EasyMock克隆收藏而不是仅仅保留引用的方法吗 现在没有办法用Easymock来管理这样的中间捕获 但是,您可以创建自己的捕获类型来实现这一点 以下是一些让您开始学习的内容:
public class DefensiveCopyCapture<T> extends Capture<T> {
@Override
public void setValue(T value) {
// create a copy of your type here;
// if the type happens to be a Collection like in your case, use
// the copy constructors to create a copy
T copy = ...;
super.setValue(copy);
}
}
公共类DefensiveCopyCapture扩展了捕获{
@凌驾
公共无效设置值(T值){
//在此处创建您的类型的副本;
//如果该类型恰好是与您的情况类似的集合,请使用
//复制构造函数来创建副本
T拷贝=。。。;
super.setValue(复制);
}
}
然后,您可以像下面这样创建捕获并捕获任意多的值—捕获的值集合将包含执行过程中不同时间捕获的所有值的快照
Capture<Type> capturer = new DefensiveCopyCapture<Type>();
Capture capturer=new DefensiveCopyCapture();
您还可以使用getCurrentArguments和IAnswer检索参数
但是,扩展捕获对象也非常优雅