import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; class Test { interface RunnableX extends Callable { void run() throws Exception; default String call() throws Exception { run(); return null; } } static void foo(RunnableX r){ System.out.println(r); } static void foo(Callable> c){ System.out.println(c); } public void test() { foo(()-> new ArrayList() ); } } class Test1 { interface RunnableX extends Callable> { void run() throws Exception; default List call() throws Exception { run(); return null; } } static void foo(RunnableX r){ System.out.println(r); } static void foo(Callable> c){ System.out.println(c); } public void test() { foo(()-> new ArrayList() ); } }