我试图使用dependend泛型参数来存根方法,如下所示:
<T extends Foo> void exampleMethod(Type<T> arg1, T arg2);
使用Mockito。 但是当我尝试这样做时
verify(mock).exampleMethod(isA(Type.class), any());
它不起作用,但给了我一个无限的泛型错误。 (我知道这不是磕磕绊绊,但这样的例子更容易,它归结为我想的那样。)
如果有人能提供帮助,我们将不胜感激。
答案 0 :(得分:3)
这里的错误是any()
返回一个Object类型,对类型T
无效。泛型仅负责警告。请改用any(Foo.class)
:
public class MockTest {
public static void main(String[] args) {
MockTest sandbox = Mockito.mock(MockTest.class);
// gives a type safety warning suppressable with @SuppressWarnings
verify(sandbox).exampleMethod(isA(Class.class), any(Foo.class));
// gives an unchecked cast warning suppressable with @SuppressWarnings
verify(sandbox).exampleMethod((Class<Foo>) isA(Class.class), any(Foo.class));
// gives no warnings because the cast in the helper method below
verify(sandbox).exampleMethod(isAClassOf(Foo.class), any(Foo.class));
}
@SuppressWarnings("unchecked")
private static <T> Class<T> isAClassOf(Class<T> clazz) {
return isA(Class.class);
}
<T extends Foo> void exampleMethod(Class<T> arg1, T arg2) { }
}