如何获取lambda表达式的特定类,例如方法参数中类型的子类

如何获取lambda表达式的特定类,例如方法参数中类型的子类,lambda,mockito,Lambda,Mockito,我试图为mockito测试添加一个定制的ArgumentMatcher(Matcher的子类),下面是代码: when(mockedObject.mockedMethod( argThat((int id)-> id > 5 || id < 1 ? false : true))); 我能告诉编译器我想在lambda表达式中使用ArgumentMatcher,而不是Matcher吗 谢谢 不,你想要的是不可能的org.hamcrest.Matcher不是一个功能接口。它有

我试图为mockito测试添加一个定制的
ArgumentMatcher(Matcher的子类)
,下面是代码:

when(mockedObject.mockedMethod(
   argThat((int id)-> id > 5 || id < 1 ? false : true)));
我能告诉编译器我想在lambda表达式中使用
ArgumentMatcher
,而不是Matcher吗


谢谢

不,你想要的是不可能的
org.hamcrest.Matcher
不是一个功能接口。它有多个非抽象方法。例如,以下任何一项:

  • org.hamcrest.selfdescription.descripbeto(Description)
  • org.hamcrest.Matcher.matches(对象)
编译器需要将lambda转换为函数接口的实现。但是,
ArgumentMatcher
本身已经是一个类了

作为一种解决方法,您可以创建自己版本的
argat
,它接收
java.util.function.Predicate
,并将其转换为
Matcher
实现。但是,您将失去对
自描述的支持,不得不忍受糟糕的故障描述

public static <T> T argThat(Matcher<T> matcher)