Блок - это в некотором смысле просто любая функция. Я никогда не программировал Java, но вот несколько примеров кода для других языков, чтобы показать вам, что блоки похожи на передачу анонимных функций.
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
Другими словами, если Java поддерживает подобные анонимные функции, вы получаете себе блок! Поскольку они являются функциями, они могут принимать аргументы, как блоки. Вот еще один пример Lua:
local function add_something(callback)
callback(5 / 2);
end
add_something(function(a)
print(a + 5);
end)
-- 7.5