abstract class Main { public interface LifetimeFunction { int execute() throws ELF; } public final void foo(final LifetimeFunction action) throws E { runSync(() -> { action.execute(); return 42; }); } abstract < E1 extends Throwable> void runSync(LifetimeFunction action) throws E1; }