Un bloque es, en cierto sentido, simplemente una función anónima. Nunca he programado Java, pero aquí hay algunos ejemplos de código para otros idiomas que le muestran que los bloques son similares a pasar funciones anónimas.
Ruby:
def add_5
puts yield + 5
end
add_5 { 20 }
# => 25
Javascript:
var add_5 = function(callback){
return callback.call() + 5;
}
add_5(function(){ return 20 });
// returns 25
Lua:
local function add_5(callback)
print(callback() + 5);
end
add_5(function()
return 20;
end)
-- returns 25
En otras palabras, si Java soporta funciones anónimas por el estilo, usted se consiguió un bloque! Como son funciones, pueden tomar argumentos, al igual que los bloques. Aquí hay otro ejemplo de Lua:
local function add_something(callback)
callback(5/2);
end
add_something(function(a)
print(a + 5);
end)
-- 7.5
Incorrecto. Groovy admite parámetros nombrados para bloquear. Ver: http://groovy.codehaus.org/JN2515-Closures#JN2515-Closures-ClosureParameters – jiggy
Por supuesto, Groovy admite parámetros con nombre para los bloques. :-) Mi comentario es que en Groovy, si tu bloque toma un parámetro, nombrarlo es opcional --- mientras que en Ruby es obligatorio. –
Lo siento, lo leí mal :) – jiggy