Java 8函数-“;包装纸;在执行给定lambda之前执行某些操作的函数?
我们有以下情况: 测试中期,需要更新一些上下文变量。测试的具体位置和应该发生什么是可变的。我想提供一个“包装器”函数,它设置一些上下文变量,然后执行函数调用中给出的所有断言 因此,类似于以下内容:Java 8函数-“;包装纸;在执行给定lambda之前执行某些操作的函数?,java,java-8,functional-interface,Java,Java 8,Functional Interface,我们有以下情况: 测试中期,需要更新一些上下文变量。测试的具体位置和应该发生什么是可变的。我想提供一个“包装器”函数,它设置一些上下文变量,然后执行函数调用中给出的所有断言 因此,类似于以下内容: public void withDefaultContextA(Function<???, Void> noArgsCall) { setupDefaultContextA(); noArgsCall.invoke() // not sure how apply() wo
public void withDefaultContextA(Function<???, Void> noArgsCall) {
setupDefaultContextA();
noArgsCall.invoke() // not sure how apply() would be invoked here
}
我怎样才能做到这一点?Java8函数可以这样使用吗?如果没有,我还有其他方法可以实现这一点吗?您似乎想修饰任何给定的可运行的(您在问题中使用函数和双函数,但当它们返回无效并且似乎没有收到任何参数时,使用可运行的在这里似乎更合适)
您可以这样做:
public static void withDefaultContext(Runnable original) {
setupDefaultContextA();
original.run();
}
然后,您可以按如下方式使用上述方法:
@Test
public void testSomething() {
withDefaultContextA(() -> {
... // do some asserts
}
withContext((new Context(...)) -> {
... // do some asserts
}
}
withDefaultContext(() -> {
// do some asserts
});
或具有特定上下文:
public static void withContext(Context context, Runnable original) {
setupContext(context);
original.run();
}
用法:
withContext(new Context(...), () -> {
// do some asserts
});
如何使用消费者?一个void方法,它接受一个上下文
与Lino一致,函数
返回一个值作为唯一参数。似乎Consumer
和BiConsumer
更适合这个用例。这正是我所需要的。我想不起“装饰者”这个词。可能会让谷歌的搜索更加富有成效。:)谢谢
withContext(new Context(...), () -> {
// do some asserts
});