Menu
Coddy logo textTech

Appariement de motifs

Fait partie de la section Logique & Flux du Journey Java de Coddy — leçon 37 sur 59.

La correspondance de motifs en Java vous permet de tester si un objet possède un type spécifique et d'extraire ses composants. Elle simplifie les opérations de vérification de type et de conversion de type.

Voyons comment utiliser la correspondance de motifs avec instanceof :

Object obj = "Hello";
if (obj instanceof String str) {
   // str est automatiquement casté en String
   System.out.println(str.toUpperCase());
}

Après l'exécution du code ci-dessus, la sortie est :

"HELLO"

Vous pouvez également utiliser l'appariement de motifs dans les expressions switch :

Object value = 42;
String result;
if (value instanceof Integer i) {
    result = "Number: " + i;
} else if (value instanceof String s) {
    result = "Text: " + s;
} else {
    result = "Unknown";
}

Après l'exécution du code ci-dessus, result contient :

“Number: 42”

challenge icon

Défi

Facile

Créez une méthode nommée processValue qui prend un argument :

  1. Un Object (value) qui pourrait être de différents types

La méthode doit utiliser la correspondance de motifs avec instanceof pour traiter la valeur et retourner une chaîne basée sur ces règles :

  • S'il s'agit d'un Integer : retournez "Number: " suivi de la valeur doublée
  • S'il s'agit d'une String : retournez "Text: " suivi de la valeur en majuscules
  • S'il s'agit d'un Boolean : retournez "Boolean: " suivi de la valeur opposée (true devient false et vice versa)
  • Pour tout autre type : retournez "Unknown"

Aide-mémoire

L'appariement de motifs en Java permet de tester si un objet possède un type spécifique et d'extraire ses composants à l'aide de instanceof :

Object obj = "Hello";
if (obj instanceof String str) {
   // str is automatically cast to String
   System.out.println(str.toUpperCase());
}

Vous pouvez chaîner plusieurs vérifications d'appariement de motifs :

Object value = 42;
String result;
if (value instanceof Integer i) {
    result = "Number: " + i;
} else if (value instanceof String s) {
    result = "Text: " + s;
} else {
    result = "Unknown";
}

Essayez vous-même

import java.util.Scanner;

public class Main {
    public static String processValue(Object value) {
        // TODO : Utiliser l'appariement de motifs avec instanceof pour traiter la valeur
        // Si c'est un Integer : return "Number: " + (value * 2)
        // Si c'est une String : return "Text: " + value.toUpperCase()
        // Si c'est un Boolean : return "Boolean: " + (!value)
        // Pour tout autre type : return "Unknown"
        
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String type = scanner.nextLine();
        String inputValue = scanner.nextLine();
        
        Object value = switch(type) {
            case "Integer" -> Integer.parseInt(inputValue);
            case "String" -> inputValue;
            case "Boolean" -> Boolean.parseBoolean(inputValue);
            default -> inputValue;
        };
        
        System.out.println(processValue(value));
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux