我正试图用Mockito捕捉一个论点。此参数的类型为List< MyClass >
。但我找不到正确的语法来指定它。
我可以这样做:
ArgumentCaptor< MyClass > captor =
ArgumentCaptor.forClass( MyClass.class );
但是我没有这个来编译:
ArgumentCaptor< List<MyClass> > captor =
ArgumentCaptor.forClass( List<MyClass>.class );
有办法吗?
答案 0 :(得分:15)
它应该使用@Captor
注释:
@Captor
private ArgumentCaptor<ArrayList<SomeType>> captor;
答案 1 :(得分:4)
不幸的是,.class
只返回Class<List>
对象,其中List
是原型。实现并不完美,无法使用.class
获取嵌套类型信息。像List<Foo>.class
之类的东西是无效的语法,因为在任何地方都不存在这样的Class<List<Foo>>
对象。
答案 2 :(得分:3)
我认为这是因为Java没有静态地确定参数化类的类型。
这与编译方式相同:
Class<?> c1 = ArrayList<String>.class;
而且这在类型解析问题List
之上都不是一个接口:
Class<?> c2 = List<String>.class;
但这确实可以编译,你可以做类似的事情:
public class MyList implements List<String> {
... the List's methods to implement ...
}
// and later in the code:
Class<?> c3 = MyList.class;