Flipping the diamond - JEP 286

After my blogpost yesterday Pros and cons of JEP 286 I’ve received a lot of feedback.

The more I’ve been thinking about var/val it seems that my biggest mental hurdle is the Java 7 diamond operator. The diamond operator is good, it eliminates typing, and I like it… but I have the feeling it could be so much better!

Instead of (or in addition to) adding var and val I’d love to see a solution where we could ‘flip’ the side of the diamond operator.

Look at the following example:

    // Java 7 with diamond operator:
    List<Integer> numbers = new ArrayList<>();

    // Proposed var: (saves 3 characters)
    var numbers = new ArrayList<Integer>();

    // Flipped diamond operator: (larger, but more readable IMHO)
    List<> numbers = new ArrayList<Integer>();

In this case adding var/val doesn’t improve much, we still need to specify our generics somewhere, and now it has moved.

But look at the following example:

    // Java 7 with diamond operator:
    Map<String, Integer> someMap = someMethod();

    // Proposed var:
    var someMap = someMethod();

    // Flipped diamond operator:
    Map<> someMap = someMethod();

The thing is: There is much more to win on the LHS with the diamond operator than we currently have with the RHS diamond. In most cases you’re going to call code that has already defined the typing, in all those cases you can skip it LHS.

If it is possible to add var and infer everything, it should also be technically possible to have a flipped side diamond operator right? Or am I missing something?