Menu
CoddyTech

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 permet de vérifier si un objet est d’un type spécifique et d’en extraire des composants. Elle simplifie les opérations de vérification de type et de transtypage.

Voyons comment utiliser la mise en correspondance de motifs avec instanceof :

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

Après avoir exécuté le code ci-dessus, le résultat est :

"HELLO"

Vous pouvez également enchaîner les vérifications de correspondance de motifs avec else if :

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ée une méthode nommée processValue qui prend un argument :

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

La méthode doit utiliser la correspondance de motifs avec instanceof pour traiter la valeur et renvoyer une chaîne selon les règles suivantes :

  • Si c’est un Integer : renvoyer "Number: " suivi de la valeur doublée
  • Si c’est un String : renvoyer "Text: " suivi de la valeur en majuscules
  • Si c’est un Boolean : renvoyer "Boolean: " suivi de la valeur opposée (true devient false et vice versa)
  • Pour tout autre type : renvoyer "Unknown"

Essayez vous-même

import java.util.Scanner;

public class Main {
    public static String processValue(Object value) {
        // TODO: Utiliser le filtrage par motif avec instanceof pour traiter la valeur
        // Si c'est un Integer : retourner "Number: " + (value * 2)
        // Si c'est un String : retourner "Text: " + value.toUpperCase()
        // Si c'est un Boolean : retourner "Boolean: " + (!value)
        // Pour tout autre type : retourner "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

Entraînez-vous par vous-même : Compilateur Java en ligne