Java 1.5 New features
Juli 2005 - Sun presenteerde afgelopen april de nieuwste versie van Java; Java 2 Platform Standard Edition versie 1.5. Ook wel bekend als J2SE5.0 of ‘project Tiger’. De relevante JSR’s (Java Specification Requests) voor de onderdelen in dit Whitebook van het project waren JSR14, JSR201 en JSR175. Maar dit zijn er slechts 3 van de in totaal 15 door Sun opgepakte verbeteringen die aangedragen zijn door de Java Community. Sun heeft in deze release het grootste aantal veranderingen doorgevoerd sinds Java voor het eerst werd geïntroduceerd. In dit Whitebook worden een aantal highlights beschreven.
Generics
Wellicht de meest verwachte nieuwe feature van Java. De toepassing van Generics kan het beste worden uitgelegd aan de hand van een voorbeeld.
Eerst een voorbeeld in versie 1.4.2:
ArrayList list = new ArrayList(); list.add(0, new Integer(42)); int total = ((Integer)list.get(0)).intValue();
De manier van typecasting in de laatste regel kan door Generics voorkomen worden.
Daardoor komt dit voorbeeld er in 1.5 als volgt uit te zien:
ArrayList<Integer> list = new ArrayList<Integer>(); list.add(0, new Integer(42)); int total = list.get(0).intValue();
Zoals te zien is wordt de code een stuk leesbaarder.
Enhanced For Loop
In talen als PL/SQL en C++ is dit principe al langer bekend onder de term ‘foreach’. Deze nieuwe loop-structuur beperkt de benodigde code om een ingewikkelde for-loop te maken. Kort gezegd: de compiler zorgt voor de iterator, zodat de programmeur deze niet zelf hoeft te schrijven. Uiteraard is het ook mogelijk om de nieuwe generics te combineren met een enhanced for-loop.
De syntax van Foreach:
for (FormalParameter : Expression) Statement
Een voorbeeld van de toepassing van een Enhanced For Loop met gebruik van Generics:
// Neem aan dat er een StringBuffer "buffer" bestaat
public void Foreach(Collection c) {
for(String str : c) {
buffer.append(str);
}
} Autoboxing/Unboxing
Converteren tussen verschillende primitive types als int en boolean naar Integer en Boolean kan zorgen voor onnodig veel code. Autoboxing en unboxing maakt kortere en duidelijkere code:
ArrayList<Integer> list = new ArrayList<Integer>(); list.add(0, 42); // je stopt er een int in en deze wordt automatisch omgezet naar een Integer Integer totalInteger = list.get(0); // standaard krijg je een Integer terug int total = list.get(0); // maar het is ook mogelijk om weer automatisch naar een int te casten
Opmerking hierbij is wel dat performance issues kunnen optreden bij veel boxing en unboxing operaties. Verder kan een NullPointerException optreden als een Object dat naar een primitive toe moet null is.
Typesafe Enumeration
Een enumeration definitie is vergelijkbaar met een class. Hierin wordt als
eerste de afgebakende set van elementen opgenomen binnen de enumeration. Elk
element is een object-instantie van de enumeration-'class'. Problemen kunnen
bij het compileren worden afgevangen. De elementen vormen een echte namespace
waarbij informatieve namen gebruikt kunnen worden.
Het meest krachtige is dat de enumeration (doordat het feitelijk een class
is) fields en methods kan definieren voor alle elementen binnen de
enumeration.
Een eenvoudig voorbeeld:
enum Season { winter, spring, summer, fall }Een uitgebreid voorbeeld:
public enum Munt {
cent(1), stuiver(5), dubbeltje(10), euro(100);
Munt(int value) { this.value = value; }
private final int value;
public int value() { return value; }
} Varargs
Deze functionaliteit zorgt ervoor dat meerdere argumenten kunnen worden doorgegeven als parameters voor een method.
Een voorbeeld:
void argtest(Object ... args) {
for (int i=0;i <args.length; i++) {
}
}
argtest("test", "data"); De simpele … notatie wordt gebruikt om het flexibele aantal argumenten van printf te implementeren.
Static Import
Dit staat de programmeur toe om te refereren naar static constants uit een class, zonder elke keer een inherit te hoeven doen. In plaats van bijvoorbeeld BorderLayout.CENTER te gebruiken elke keer als er een component moet worden toegevoegd, is het voldoende om te refereren aan CENTER.
Annotations
Beter bekend als METADATA. Deze nieuwe feature zorgt voor de mogelijkheid om extra data naast Java classes, interfaces, methods en fields toe te voegen, welke gelezen worden door onder andere de javac compiler en eventueel toegevoegd kunnen worden aan de class file. Deze metadata kan dan runtime gebruikt worden.
Dit alles moet zorgen voor een meer declaratieve programmeer stijl waarin de programmeur zegt wat er gedaan moet worden en de tools de code afgeven om dit te bewerkstelligen. Hierdoor zijn geen extra files naast de code nodig, maar kan alles in het source bestand worden opgenomen.
Conclusie
De missie van Sun lijkt er vooral op gericht te zijn om Java ‘makkelijker’ te maken. Veel langdradige code kan vervangen worden door kortere stukken en op veel vlakken is de taal ook intuïtiever geworden.
Ook de performance is verbeterd. Swing applicaties starten aanzienlijk sneller op en het geheugengebruik is merkbaar minder.
Het zal enige tijd duren voordat bestaande Java 1.3 en 1.4 applicaties zullen worden vervangen door deze nieuwe versie, maar Java 1.5 is zeker een aanrader om toe te passen in nieuwe projecten.
Referenties
- http://java.sun.com
J2SE 5.0 in a Nutshell - http://weblogs.asp.net/asmith
Java 1.5 new features

Reacties
Nieuwe reactie inzenden