Java 14 : JEP 305 Pattern Matching instanceof (Preview)
JEP 305 : Pattern Matching instanceof (Preview)
En tant que programmeur Java, nous sommes amenés à tester le type des objets avant de les caster pour éviter les erreurs de Type ClassCastException.
if (obj instance Person)
Person p = (Person) obj;
p.setName('Brian Goetz');
...
On est tellement familier au code ci-dessus qu'on pourrait le trouver simple.
Alors que caster un objet implique forcement l'instanciation de celui-ci pour l'utiliser par la suite de notre instruction.
Grace au Pattern Matching introduit avec Java 8, La JEP 305 permet de simplifier l'écriture des expressions instanceof (comme c'est le cas avec les langage Haskell, C#.).
if(obj instanceof Person p) p.setName("Brian Goetz");
Le Pattern Matching permettra d'extraire et d'instancier une variable castée si la condition (matching) est vrai, ainsi nous pouvons utiliser l'objet directement et ainsi éviter les cérémonies autour du code.
Le scope de la variable :
Comme dans les expréssions lamba, la notion de scope se pose, en effet le scope de la variable extraite est définie en fonction de la sémantique de l'expression qui satisfait la condition du Pattern Matching.
if (!(obj instanceof Person p))
.. p.setName(..) .. // fait référence à une variable définie dans la classe
else
.. p.setName(..) ..// fait référence à la variable extraite du pattern matching
if (obj instanceof Person p)
// on peut utiliser p dans ce block
else
// on ne peut pas utiliser p dans ce block
La fonctionnalité JEP 305 est encore en mode Preview dans version 14 (c'est a dire pas automatiquement utilisable dans la jdk),
Avec cette nouvelle fonctionnalité, Java continue ainsi son évolution et à adopter des bonnes pratique issues d' autres langages comme Haskell, C# pour simplifier la cérémonie autour du code et faciliter la vie des développeurs.