Menu
Coddy logo textTech

Appariement de motifs

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

Le filtrage par motif (pattern matching) en Java vous permet de tester si un objet possède un type spécifique et d'en extraire des composants. Il simplifie les opérations de vérification de type et de transtypage (casting).

Voyons comment utiliser le filtrage par motif (pattern matching) avec instanceof :

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

Après l'exécution du code ci-dessus, le résultat est :

"HELLO"

Vous pouvez également enchaîner les vérifications de filtrage par motif (pattern matching) 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é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 le pattern matching avec instanceof pour traiter la valeur et retourner une chaîne de caractères 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"

Essayez vous-même

import java.util.Scanner;

public class Main {
    public static String processValue(Object value) {
        // TODO: Utiliser le pattern matching avec instanceof pour traiter la valeur
        // Si c'est un Integer : retourner "Number: " + (value * 2)
        // Si c'est une 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