import java.util.Arrays; import java.util.List; import java.util.function.Consumer; abstract class CallbackCast { String send(Number... actions) { return executeBlocking(callback -> processNumbers(Arrays.asList(actions), (Runnable) callback)); } public T executeBlocking(Statement statement) { return null; } abstract List processNumbers(List actions, Runnable callback); } interface Statement { void execute(Consumer callback); }