As @Holger said, Java 8 improved contextual inference so that this works_
public static <T> Iterator<T> iter(Iterable<T> i)
{
return i.iterator();
}
public static void main(String[] args)
{
Iterator<String> it = iter( new ArrayList<>() );
\____________________________/
}
It didn't work in Java 7 — the inference on new ArrayList<>()
could not depend on context.
It'll be a huge change to the language to do what you want in the question. John Rose started a similar discussion, see http://mail.openjdk.java.net/pipermail/lambda-dev/2013-July/010531.html
Too much inference and too much contextual dependency can be a bad thing. It's not so much that the compiler cannot handle the complexity - it can. It's about whether human programmers can handle it. I am sensing that Java 8 is already at a dangerous level that the codes will be difficult for humans to parse.