Enigszins vertraagd door de overname van Sun door Oracle is sinds 28 juli Java 7 beschikbaar. Java 7 bevat geen hele grote wijzigingen zoals Java 5, dat o.a. generics introduceerde, maar bevat toch een aantal handige verbeteringen.
Diamond syntax
Alhoewel met generics type-safe collections mogelijk werden, levert het ook meer typewerk op, bijvoorbeeld:
Map<String, String> myMap = new HashMap<String, String>();
Omdat polymorphisme niet van toepassing is op generic types en dus het <String, String> aan beide kanten gelijk moet zijn, lijkt het overbodig dat zowel links als rechts te herhalen. Met de komst van Java 7 is dat inderdaad niet meer nodig:
Map<String, String> myMap = new HashMap<>;
Deze lege “<>“ wordt vanwege zijn vorm de diamond syntax genoemd en scheelt (een beetje) type- en leeswerk.
Strings in switch statements
Een veel gestelde vraag tijdens de OCP Java SE 6 Programmer examen training is waarom we geen Strings kunnen gebruiken in een switch statement. Die vraag is met de komst van Java 7 overbodig, want vanaf nu kan het wel:
String s = "dinsdag ";
switch (s) {
case "maandag ": ... ;
case "dinsdag ": ... ;
case "woensdag ": ... ;
...
}
Precise re-throw
Wat exception handling betreft zijn er twee handige aanpassingen toegevoegd aan Java 7. Het is nu mogelijk om bij het catch-en en doorgooien van algemene Exceptions de specifieke exception class aan te geven in de throws-clause, in plaats van een algemene en nietszeggende “throws Exception”.
Java 6 en eerder:
public void example() throws Exception {
try {
// code that may throw IOException
} catch (Exception e) {
e.printStacktrace();
throw e;
}
}
Java 7:
public void example() throws IOException {
try {
// code that may throw IOException
} catch (Exception e) {
e.printStacktrace();
throw e;
}
}
Op deze manier blijft de informatie over welke exception gegooid kan worden zo specifiek mogelijk.
Multi-catch
Een tweede uitbreiding bestaat uit het kunnen catch-en van meerdere exceptions in een enkel catch blok, met behulp van het |-karakter:
try {
...
} catch (IOException | ParseException e) {
e.printStacktrace();
}
De variabele ‘e’ wordt dan van het type Exception, de eerst gedeelte superclass van IOException en ParseException. Op deze manier hoef je de exception-handling code van de eerste exception niet nogmaals te herhalen voor de tweede.
Naast deze nieuwe features bevat Java 7 o.a. een nieuw IO framework “NIO2” en de mogelijkheid grote taken op te breken in kleinere en parallel uit te voeren (Fork/Join Framework).
Er zijn nog geen details bekend over de inhoud van een Oracle Certified Professional Java SE 7 Programmer certificaat, maar ga er maar vanuit dat een aantal van bovenstaande nieuwe features deel zal gaan uitmaken van de examenstof!