Java 14 : JEP 305 Pattern Matching instanceof (Preview)

plus de 4 an(s)

Description

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.