import java.util.function.Function; abstract class Logger { public void error(Throwable t) { } public abstract void error(String message, Throwable t, String... details); } public class JavaTest { private static Logger ourLogger = null; void test() { test2(ourLogger::error); test3(ourLogger::error); } void test2(Function x) { } void test3(Function x) { } }