Java Función 8 - Función de "contenedor" que hace algo antes de ejecutar dado lambda?

user991710:

Tenemos el siguiente escenario:

Mediados de prueba, algunas variables de contexto necesitan ser actualizados. ¿Dónde exactamente en la prueba y qué es exactamente lo que debe suceder es variable. Me gustaría ofrecer una función de "envoltura", que establece algunas variables de contexto y luego realiza todas las afirmaciones que se le da en la llamada de función.

Por lo tanto, algo como lo siguiente:

public void withDefaultContextA(Function<???, Void> noArgsCall) {

    setupDefaultContextA();
    noArgsCall.invoke() // not sure how apply() would be invoked here
}

o:

public void withContextA(BiFunction<???, Context, Void> providedContextCall) {

    setupContext(providedContext); // not sure how apply() would be invoked here
}

Y en la prueba correspondiente, éstos deberían ser invocadas como sigue:

@Test
public void testSomething() {

    withDefaultContextA(() -> {
        ... // do some asserts
    }

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

¿Cómo puedo conseguir esto? Can Java 8 Funciones ser utilizados de esta manera? Si no es así, ¿hay otra manera que puedo lograr esto?

Federico Peralta Schaffner:

Parece que desea decorar cualquier dado Runnable(usted utiliza Functiony BiFunctionen su pregunta, pero a medida que regresan Voidy parecen recibir sin argumentos, utilizando Runnableparece más apropiado aquí).

Puede hacerlo de esta manera:

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

A continuación, se puede utilizar el método anterior de la siguiente manera:

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

O con un contexto específico:

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

Uso:

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=203549&siteId=1
Recomendado
Clasificación