gpt4 book ai didi

Java 8 函数 - "wrapper"函数在执行给定的 lambda 之前执行某些操作?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:42 25 4
gpt4 key购买 nike

我们有以下场景:

测试中期,需要更新一些上下文变量。测试中的确切位置以及究竟应该发生什么是可变的。我想提供一个“包装器”函数,它设置一些上下文变量,然后执行在函数调用中提供给它的所有断言。

所以,类似下面的内容:

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
}
}

我怎样才能做到这一点?可以以这种方式使用 Java 8 函数吗?如果没有,是否有其他方法可以实现此目的?

最佳答案

您似乎想装饰任何给定的 Runnable(您在问题中使用了 FunctionBiFunction,但是当它们返回 Void 并且似乎没有收到任何参数时,使用 Runnable 在这里似乎更合适)。

你可以这样做:

public static void withDefaultContext(Runnable original) {
setupDefaultContextA();
original.run();
}

然后,你可以使用上面的方法如下:

withDefaultContext(() -> {
// do some asserts
});

或在特定上下文中:

public static void withContext(Context context, Runnable original) {
setupContext(context);
original.run();
}

用法:

withContext(new Context(...), () -> {
// do some asserts
});

关于Java 8 函数 - "wrapper"函数在执行给定的 lambda 之前执行某些操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com