personal opinions and thoughts

Diamond – Java 7 new feature

I spotted an article on InfoQ summarizing new futures of the upcoming JDK 7. Coming from a Java background, I was really curious to see what’s in store. The article noted several “small language enhancements”, so I binged around (yes, I actually used bing), and found the presentation slides from JavaOne by Joe Darcy.

While many of the enhancements make sense, I was really stunned by the “diamond operator” (page 64 of the slides). The point of it is to reduce typing when declaring generic types. Why specify the type twice, if you can do it in one spot?

This reminded my of the var keyword in C# and the C++0x’s new incarnation of the auto keyword. The difference is that the diamond operator occurs on the right-hand-side, while the type is specified on the left. Doesn’t seem like a big deal, but in my opinion this idea is very short sighted.

By having the type on the right-hand-side, both C# and C++ allow much more flexibility. They can handle not only type inference of generics, but pretty much of anything. Specifying type on the right is very natural, and mimics assignment “from right to left”. It seems silly of Java to ignore this obvious and proven strategy and instead introduce a new operator. This will be confusing for those programmers who do work with many different languages, and will make Java feel out of place and underpowered. For comparison, this is what Java could have had if it adopted the “auto” keyword:

The above (or their equivalents) are already available in C# 3.0 and in draft C++0x. Unfortunately (judging by Joe’s comments) Java 7 will be released without such type inference mechanisms. Disappointing, very disappointing…