Java 7 depuis les tranchées
Le but de ce billet est de fournir un retour d’expérience sur Java 7, que j’utilise sur mon projet actuel. Il aura fallu attendre 5 ans avant la sortie de cette version majeure qui apporte de nouvelles fonctionnalités. Il serait dommage de ne pas l’utiliser !
Les nouvelles fonctionnalités
Voici celles que j’utilise et que trouve très pratiques :
- try-with-resources qui permet de fermer automatiquement les ressources.
- catch multiple qui permet d’avoir d’attraper plusieurs exceptions dans un seul bloc catch.
- diamond operator qui permet d’omettre la déclaration des types génériques, le compilateur réalisant de l’inférence de type.
java.nio.file.Path
qui remplace avantageusement la classe File en offrant une API plus riche.- java.util.Objects qui est une
classe utilitaire (étonnamment ressemblante avec la classe
Objects
de guava) fournissant des méthodes de base pour travailler avec desObject
:equals
,hashCode
,toString
. À noter, Eclipse 3.7 ne tire pas partie de ces méthodes lors de la génération des méthodesequals
ethashCode
.
Une incompatibilité avec Surefire
J’ai rencontré l’erreur suivante :
java.lang.VerifyError: Expecting a stackmap frame at branch target
. Heureusement, il est possible
de contourner en passant l’argument -XX:-UseSplitVerifier
à la JVM. Voici la configuration pour
les utilisateurs de Maven :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<argLine>-XX:-UseSplitVerifier</argLine>
<skipTests>false</skipTests>
</configuration>
</plugin>
Des faux positifs dans Sonar
Nous utilisons Sonar 2.13 et les nouveautés du langage provoque des faux positifs : l’instruction
try-with-resource
provoque une violation Inner Assignement
dans Checkstyle.