Whats coming up in Java SE 7
In the past I have been a bit lazy on staying up-to-date with latest JDK developments, at least last year I have been to JavaPolis 2006 and listened to some interesting talks of Sun engineers about the future of the Java platform and especially the language itself.
Development for Java SE7 is under full steam and as of writing this post installable previews of the JDK 7 Project are available. I have put together a list of the major enhancements (all driven by JSR communities) of the platform.
Modularity: JSR 294 specifies so called superpackages (there will be a new keyword superpackage). Now packages are more than a means for hierarchically organizing your classes. More semantics are added as it will be possible to put visibility attributes on packages.
JSR 277 defines new deployment mechanisms through deployment modules that will be packaged with a new distribution format (JAM Java Module). So in future a build process may also be called ‘JAM session’ If you want to bruh up your knowledge on this I recommend a presentation published at parleys.com.
Swing: rich client technologies have been pushed a lot in the last 2-3 years. The Java API for Rich Client development lacks support for typical development task (this is where the eclipse platform competes successfully and is unbeaten). So now the JSR 296 (Swing Application Framework), JSR 295 (Bean Binding Framework) and JSR 303 (Bean Validation Framework) try to fill some of the gaps. I haven’t had the time to look at JSR 295 but this looks similar to what JBoss is doing with Hibernate Validator ( see one of my previous posts).
Reified Generics: Weren’t we excited as we heard about Java5 would offer generics/type templating didn’t we get really disappointed when we experienced type erasure. Now it seems that type information will be made available at runtime for templated types. I had a few occasions where this would have been useful to me.
Short Instance Creation: Isn’t it a pain to type Map<String, Object> map=new HashMap<String, Object>(). With Java7 there will be relief and this could look like Map<String, Object> map=new HashMap().
Annotations on Java Types: Annotations will be supported for more syntax element (JSR 308).
Language-level XML: I’m a bit scared about this one. See Mark Reinholds talk at JavaPolis 2006.JavaBean Property Support: Groovy (like other scripting languages) has a very explicit notion of a property expressed by syntactical elements. In the future Java we might see new keywords and we no longer have to select Alt+Shift+S+Generate Setters and Getters… (using my favourite IDE eclipse).
Closures: If you have ever programmed Lisp or Smalltalk (yes I did this) you really miss passing around code as argument to method calls etc. Scripting languages have gained wide popularity due to their simple but expressive syntax – so there is pressure on the Java language to catch up with these.
invokedynamic: In order to better support scripting languages a new byte code instruction invokedynamic (JSR 292) will help that scripting languages will perform much better on the Java platform.
Date / Time API: Probably inspired by the Joda Time project we might see an improved API (JSR 310) for manipulating date and time types.
Units and Quantities: If you are in implementation of business applications you repeatedly have to come up with your own implementations of units, quantities, etc. JSR 275 will address this by considering to include the JScience project.
JMX: JSR 255 defines JMX 2.0 which will feature annotations and remote connectors based on web services
Javadoc: Seems Javadoc has come to age and needs some update (JSR 260).
NIO 2: JSR 203 is going to complete the NIO API that was introduced with Java5.