Follow Us on Twitter

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

Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.