import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; interface IoFunction extends Consumer { @Override default void accept(T t) {} void acceptX(T t) throws IOException; } interface IFunction extends Consumer { void accept(T t); } interface IIFunction extends Consumer {} class Test { public static void main(String[] args) { List strings = Arrays.asList("a", "b", "c"); strings.forEach((IoFunction) arg -> {throw new IOException();}); strings.forEach((IFunction) arg -> {}); strings.forEach((IIFunction) arg -> {}); strings.forEach((Consumer) arg -> {}); } }