Answers:
有一种类型安全的方法:使用ArgumentMatchers.any()并使用以下类型进行限定:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
(Matchers.<AsyncCallback<ResponseX>>any()
Matchers实际上已被弃用,但ArgumentMatchers确实可行。
使用Java 8,any()由于增强了类型推断功能,因此您可以简单地使用(假定静态导入)不带参数或类型参数。现在,编译器从目标类型(方法参数的类型)知道您的实际意思Matchers.<AsyncCallback<ResponseX>>any(),这是Java 8之前的解决方案。
any()匹配AsyncCallback<AnyOtherType>吗?
AsyncCallback<AnyOtherType>如果参数类型为“ AsyncCallback <ResponseX>”,则@MatthewRead Using 甚至不应编译。
when(x.y(any())).thenAnswer(...)例如,当y是public <T> T y(AsyncCallback<T> arg)。如果需要的话,也许最好检查一下答案的类型?
isA()。如果该对象包含Class与该类型相对应的对象,并且接口公开了该对象,那么我想您可以在自定义匹配器中对其进行检查。或者例如,在a的情况下,Collection您可以检查元素的类型。
MatchersArgumentMatchers在Mockito v2中被替换-bheussler
将pierrefevrier注释发布为答案,如果它出现在答案中而不是注释中,则可能会很有用。
使用新版本的Mockito: (Matchers.<AsyncCallback<ResponseX>>any()
您可以进行强制转换,并在需要时添加抑制警告:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
如果Java允许使用“泛型”泛型,那么他们可以使用类似您所寻找的方法
private static <T, E> T<E> mock(Class<T<E>> clazz)
You cannot use argument matchers outside of verification or stubbing.
@SuppressWarnings:java 8之前的版本,如果要将其分配给一个单独的变量,则可以使用any()intoy的答案中的as。现在使用Java 8,any()可以内联使用,而无需单独分配。