Might be Java 10 has what you (and I) want, through the var
keyword.
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
From JDK Enhancement Proposals 286
Update: Yap, that feature made it into the Java 10 release!