paso - ¿Cómo se pasa un bloque ejecutable como parámetro en Java?
paso de parametros en java ejemplo (2)
Puedes usar objetos Runnable
:
public static void someMethod(boolean flag, Runnable block1, Runnable block2) {
//some other code
if(flag)
block1.run();
else block2.run();
//some other code
}
Entonces puedes llamarlo con:
Runnable r1 = new Runnable() {
@Override
public void run() {
. . .
}
};
Runnable r2 = . . .
someMethod(flag, r1, r2);
EDITAR (perdón, @Bohemian): en Java 8, el código de llamada se puede simplificar utilizando lambdas:
someMethod(flag, () -> { /* block 1 */ }, () -> { /* block 2 */ });
Todavía declararías someMethod
la misma manera. La sintaxis lambda simplemente simplifica cómo crear y pasar los Runnable
.
¿Hay una manera de pasar un bloque ejecutable como un parámetro a un método estático? ¿Es posible en absoluto? Por ejemplo tengo este método.
public static void someMethod(boolean flag, Block block1, BLock block2) {
//some other code
if(flag)
block1.execute();
else block2.execute();
//some other code
}
o algo así. En realidad es más complicado que esto, simplemente simplifiqué la pregunta. Estoy tratando de refactorizar mi proyecto y creé una clase de utilidad genérica que contiene métodos estáticos que usan mis clases.
Simplemente puede crear una interfaz y pasar objetos de clases que implementan esa interfaz. Esto se conoce como el patrón de Comando.
Por ejemplo, podrías tener:
public interface IBlock
{
void execute();
}
y una clase implementadora:
public class Block implements IBlock
{
public void execute()
{
// do something
}
}
En Java 8, podrá pasar expresiones lambda, como predicados y funciones, que harán que el código sea un poco más claro, pero esencialmente haga lo mismo.