recepcion paso parametros metodos funciones envio entre ejemplos ejemplo con clases java refactoring code-design

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.