jeudi 11 août 2011

Java 7

Après quelques années de développement (au moins 3 ans), Oracle (anciennement Sun) a finalement sorti Java7.

Je suis actuellement en stage et je me suis demandé si ce n'était pas déjà possible d'intégrer les nouvelles fonctionalités de Java 7 dans mon projet. Opération risquée vu que je travaille sur Eclipse et que ce dernier est toujours en beta à l'heure où j'écris cet article : http://wiki.eclipse.org/JDT_Core/Java7.

Donc, j'ai décidé de tester les nouvelles fonctionalités du langage avec NetBeans qui supporte déjà toutes les fonctionalités de Java7

Donc, commencez par télécharger NetBeans.

Avant de parler des nouvelles fonctionalités du langage, j'aimerais aussi parler des ajouts au niveau de la plateforme :

  • Le support dans la JVM de langages dynamiques, telles que Groovy, Jython, JRuby, etc. L'intérêt est de faire coexister dans la JVM plusieurs langages avec la possibilité d'invoquer dynamiquement (au Runtime) du code de ces langages dans notre programme  avec invokeDynamic. Par exemple, il est possible d'invoquer invoquer du code scala ou groovy dans notre programme Java et vice-versa vu que le bytecode généré (je suppose) sera le même. J'imagine que par exemple dans un futur proche un portage de Bash sur la JVM (JBash) et exécuter un programme JBash sur Windows ou MacOsX. 
  • Une nouvelle API pour la manipulation des fichiers et une nouvelle gestion des entrées/sorties. Cette API est très intéressante et fera l'objet d'un autre article.
  • Au niveau cryptographie, le support des algorithmes de type Elliptic Curve y sont ajoutés également.
  • Il y'a aussi le support de nouveaux protocoles réseau tels que SCTP et Sockets Direct Protocol.
Pour une liste complète des fonctionalités, je vous invite à consulter la page dédiée au projet Java 7 : JDK7 Features.

Des apports ont aussi ajoutés au langage.

Switch sur des String

Actuellement, on pouvait faire un switch que sur des entiers et les enums. Maintenant il est possible de le faire sur des String

 

Possibilité de rajouter des underscores dans les entiers

Il est aussi possible de rajouter des underscores pour la lecture des chiffres assez longs. Par exemple :

 

 

Gestion automatique des ressources

Avant, pour accéder au contenu d'une ressource (File, Socket, etc), il fallait récupérer son InputStream/OutputStream dans un try-catch, accéder à son contenu et le fermer manuellement dans une clause finally. Comme ici : 

 

Maintenant, il est possible de déclarer nos ressources dans un bloc try et sa portée se limitera à ce bloc. Une fois que ce bloc est exécuté, les ressources seront fermés automatiquement : 

 

Multi-Catch

Maintenant, il est possible de rajouter plusieurs types d'exception dans un catch.
Imaginons qu'on ait ce code : 

 

 Ce code peut être réécrit de cette façon : 


Amélioration de l'inférence de type pour la création d'instances génériques

 

Avant, c'était chiant de faire ça : 

 

Mais maintenant : 

 

<> est appelé le diamond operator.

 

Binary Litterals

Avant les nombres étaient représentés uniquement en décimal, en octal et en hexadécimal. Maintenant, il est possible de représenter des nombres binaires en mettant le préfixe '0b' devant le nombre: