Java EasyMock捕获可变参数(集合)

Java EasyMock捕获可变参数(集合),java,java-8,easymock,Java,Java 8,Easymock,我正在使用EasyMock.capture捕获传递给函数的集合。但这个集合是可变的 因此,如果以后函数foo修改集合,它也会反映在EasyMock捕获的值中。这是一种迫使EasyMock克隆收藏而不是仅仅保留引用的方法吗 现在没有办法用Easymock来管理这样的中间捕获 但是,您可以创建自己的捕获类型来实现这一点 以下是一些让您开始学习的内容: public class DefensiveCopyCapture<T> extends Capture<T> {

我正在使用EasyMock.capture捕获传递给函数的集合。但这个集合是可变的


因此,如果以后函数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检索参数

但是,扩展捕获对象也非常优雅