import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.concurrent.Callable; class Test { private static void foo(Runnable runnable) { System.out.println(runnable); } private static void foo(Callable> callable) { System.out.println(callable); } public static void main(String[] args) { final Collection collection = new ArrayList<>(); final Iterable iterable = collection; foo(iterable::iterator); foo(collection::iterator); } }