TUTORIEL JAVA 
Java 5.0 : les nouveautés
Generics, boucle for(), enums, imports statiques : survol des principales améliorations de la dernière version de Java. (13/10/2004)
Le changement radical de version entre J2SE 1.4 et J2SE 5.0 n'est pas anodin : si l'on reste toujours dans le monde de "Java 2", Sun (ou en tout cas son département marketing) tient à faire savoir que cette version est une évolution importante de la plate-forme de développement – comparable au passage de Java à Java 2 – et avec raison.

D'après Sun, lors de la conception de cette nouvelle version, un soin tout particulier a été apporté à ses performances, sa qualité et sa capacité à surmonter les montées en charge. Fort bien, mais il reste d'autres aspects à aborder, notamment en ce qui concerne le code lui-même. Nous allons en aborder quelques-uns dans cet article. Chacun mériterait d'être un article à part entière, mais nous allons tenter d'aller au plus court.

Types génériques
Probablement l'évolution la plus marquante, la plus attendue et la plus critiquée de Java 1.5 est l'apparition de types génériques, également disponibles sur la plate-forme .NET. Cette nouveauté promet de rendre la programmation plus sûre et plus productive.

Les "generics" permettent de ne pas devoir toujours contrôler le type d'une valeur lors de l'exécution. Habituellement, un contrôle du typage est fait à chaque compilation, ce qui pouvait apporter des problèmes lors d'un mauvais casting. Avec les types génériques, il est possible de détecter ce genre de problème dès la compilation, en spécifiant qu'une collection (un objet Vector, Hashtable ou Array, par exemple) ne peut être utilisée que par une classe donnée.
Nous aborderons ce sujet plus en profondeur dans un article dédié.

Boucle for() améliorée
Les développeurs Java l'attendaient depuis un certain temps : la nouvelle version de la boucle for() permet de parcourir simplement les valeurs d'une collection.
Auparavant, une telle itération était assez longue à écrire, faisant appel à un objet Iterator, puis à l'application un casting :

void mesCartes (Collection jeu) {
  Iterator i = jeu.iterator();
  while (i.hasNext()) {
    Carte carte = (Carte) i.next();
    System.out.println(carte.toString());
    }
  }

Un tel usage est maintenant facilité, notamment par l'apport des types génériques :

void mesCartes (Collection jeu) {
  for (Carte carte : jeu) {
    System.out.println(carte.toString());
    }
  }

Egalement, cette nouvelle boucle for() permet aussi quelques facilités pour des usages plus classiques :

for (int i = 0; i <= args.length; ++i) {
  String arg = args[i];
  faireQuelquechose(arg);
  }

…peut être simplifié en :

for (String arg : args) {
  faireQuelquechose(arg);
  }

…ce qui la rapproche de la boucle foreach() que l'on trouve dans d'autres langages…

"Typesafe enums"
Un autre grand manque des précédentes versions de Java est l'impossibilité de créer une simple énumération – il fallait quelque part bidouiller le code Java pour y parvenir.
Java 5.0 apporte le mot-clef enum, qui fonctionne comme class mais permet, donc, de créer directement une énumération :

public enum MarquesVoitures { renault, peugeot, citroen, lada };

Autoboxing
Ce terme signifie que les valeurs de type primitif (int, char…) sont, en cas de besoin, implicitement convertie en l'objet correspondant (Integer, Character…). Auparavant, le boxing devait être explicite :

monTableau.add(new Integer(monEntier));
.

Importation statique
Ce nouveau mécanisme permet grosso modo d'ajouter des données globales à un programme Java : il évite de préfixer un appel de méthode ou de variable de son nom de classe à chaque utilisation (Math.PI, par exemple). On peut maintenant directement importer java.lang.Math.PI.
Cela ne résout cependant pas les conflits de nommage potentiels…

  Forum

Réagissez dans les forums de JDN Développeurs

L'API de concurrence
Développée par Doug Lea avant d'être intégrée à J2SE 5.0, le package java.util.concurrent est un ajout conséquent, apportant bon nombre d'utilitaires de gestion de la concurrence pour les threads, queue (nouvelle interface de collection) et autres.

Il existe bien d'autres évolutions du langage, trop pour être ici détaillées. Citons : varargs, classe Scanner, classe Formater, méthode printf(), méthode String.format...

 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages