0Pricing
Java Academy · Leçon

Correspondance de motifs avec instanceof

Liez une variable tout en vérifiant le type

Correspondance de motifs avec instanceof est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

Correspondance de motifs pour la détection de type

Autrefois, utiliser instanceof consistait à tester puis à convertir le type. La correspondance de motifs combine le test et la conversion en une seule étape, en associant une variable typée lorsque le test réussit.

L'ancien code répétitif

Le code classique vérifie le type, puis le convertit dans une nouvelle variable. Il est répétitif et facile à écrire incorrectement.

public class Main {
    public static void main(String[] args) {
        Object obj = "hello";
        if (obj instanceof String) {
            String s = (String) obj;
            System.out.println(s.length());
        }
    }
}

La nouvelle forme

Un motif de type déclare la variable directement : if (obj instanceof String s). Lorsque la condition est vraie, s contient déjà la valeur convertie.

public class Main {
    public static void main(String[] args) {
        Object obj = "hello";
        if (obj instanceof String s) {
            System.out.println(s.length());
        }
    }
}

La variable associée

La variable s est appelée la variable de motif. Elle est dans la portée partout où le compilateur peut prouver que le motif a correspondu, ce qui rend le code à la fois plus court et plus sûr.

L'utiliser dans des conditions

Dans la même condition if, vous pouvez utiliser la variable de motif après &&, car la correspondance est garantie dans cette branche.

public class Main {
    public static void main(String[] args) {
        Object obj = "developer";
        if (obj instanceof String s && s.length() > 5) {
            System.out.println("Long string: " + s);
        }
    }
}

Négation et portée selon le flux d'exécution

Avec une négation, la portée s'inverse intelligemment. Après if (!(obj instanceof String s)) return;, la variable s est dans la portée pour le reste de la méthode, car le code ne continue que lorsque la correspondance a réussi.

public class Main {
    static int safeLength(Object obj) {
        if (!(obj instanceof String s)) {
            return -1;
        }
        return s.length();
    }

    public static void main(String[] args) {
        System.out.println(safeLength("abc"));
        System.out.println(safeLength(42));
    }
}

Remplacer equals et la conversion de type

Un exemple classique est une redéfinition claire de equals : vérifiez le type et associez la variable sur une seule ligne, puis comparez les champs.

public class Main {
    static final class Point {
        final int x, y;
        Point(int x, int y) { this.x = x; this.y = y; }
        public boolean equals(Object o) {
            return o instanceof Point p && p.x == x && p.y == y;
        }
        public int hashCode() { return x * 31 + y; }
    }

    public static void main(String[] args) {
        System.out.println(new Point(1, 2).equals(new Point(1, 2)));
        System.out.println(new Point(1, 2).equals(new Point(3, 4)));
    }
}

Gérer des types mixtes

Les branches else if enchaînées avec des motifs permettent de répartir proprement le traitement entre plusieurs types possibles.

public class Main {
    static String describe(Object obj) {
        if (obj instanceof Integer i) {
            return "int " + (i * 2);
        } else if (obj instanceof String s) {
            return "string of length " + s.length();
        } else {
            return "unknown";
        }
    }

    public static void main(String[] args) {
        System.out.println(describe(21));
        System.out.println(describe("hello"));
        System.out.println(describe(3.14));
    }
}

La valeur nulle n'est jamais appariée

Un motif instanceof est faux pour une valeur nulle, tout comme l'opérateur classique. La variable du motif n'est donc jamais liée à une valeur nulle, ce qui élimine une cause fréquente d'exceptions de pointeur nul.

public class Main {
    public static void main(String[] args) {
        Object obj = null;
        if (obj instanceof String s) {
            System.out.println("matched: " + s);
        } else {
            System.out.println("null or not a String");
        }
    }
}

Un code plus clair et plus sûr

La mise en correspondance de motifs supprime la conversion de type redondante, limite la portée afin d'empêcher toute mauvaise utilisation de la variable et se lit presque comme du français courant. C'est le style privilégié dans Java moderne.

Mise en pratique

Un petit répartiteur qui formate différentes entrées à l'aide de motifs.

public class Main {
    static String format(Object o) {
        if (o instanceof Double d) return String.format("%.1f", d);
        if (o instanceof Integer i) return Integer.toString(i);
        if (o instanceof String s && !s.isBlank()) return s.trim();
        return "n/a";
    }

    public static void main(String[] args) {
        System.out.println(format(3.14159));
        System.out.println(format(99));
        System.out.println(format("  spaced  "));
        System.out.println(format(null));
    }
}

Vérification rapide

Testez votre compréhension des motifs instanceof.

Récapitulatif

Vous avez appris la mise en correspondance de motifs avec instanceof.

  • Elle regroupe le test de type et la conversion en une seule expression.
  • La portée de la variable du motif se limite à l'endroit où la correspondance est établie.
  • Les motifs échouent pour une valeur nulle, ce qui évite les exceptions de pointeur nul.
  • Elle simplifie les redéfinitions de equals et la répartition selon le type.

Questions Fréquemment Posées

La leçon « Correspondance de motifs avec instanceof » est-elle gratuite ?

Oui — le texte complet de « Correspondance de motifs avec instanceof » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Correspondance de motifs avec instanceof » ?

Liez une variable tout en vérifiant le type Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Correspondance de motifs avec instanceof » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Correspondance de motifs avec instanceof
  2. Motifs d’enregistrements
  3. Motifs d’enregistrements imbriqués
  4. Motifs dans switch
← Retour à Java Academy