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.Pathqui remplace avantageusement la classe File en offrant une API plus riche.
- java.util.Objects qui est une
classe utilitaire (étonnamment ressemblante avec la classe Objectsde 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éthodesequalsethashCode.
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.