Java8函数“包装器”函数,在执行给定的lambda之前执行某些操作?
我们有以下情况:
测试中期,需要更新一些上下文变量。测试的具体位置和应该发生什么是可变的。我想提供一个“包装器”函数,它设置一些上下文变量,然后执行函数调用中给出的所有断言
因此,类似于以下内容:
public void withDefaultContextA(Function<???, Void> noArgsCall) {
setupDefaultContextA();
noArgsCall.invoke() // not sure how apply() would be invoked here
}
或:
public void withContextA(BiFunction<???, Context, Void> providedContextCall) {
setupContext(providedContext); // not sure how apply() would be invoked here
}
在相应的测试中,应按如下方式调用:
@Test
public void testSomething() {
withDefaultContextA(() -> {
... // do some asserts
}
withContext((new Context(...)) -> {
... // do some asserts
}
}
我怎样才能做到这一点?Java8函数可以这样使用吗?如果没有,我还有别的方法可以做到这一点吗
# 1 楼答案
似乎您想装饰任何给定的
Runnable
(您在问题中使用Function
和BiFunction
,但当它们返回Void
并且似乎没有收到任何参数时,在这里使用Runnable
似乎更合适)您可以这样做:
然后,您可以按如下方式使用上述方法:
或具有特定上下文:
用法: