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...
|