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 vérifier si un objet possède un type spécifique et d’en extraire les composants. Elle simplifie les opérations de vérification 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, le résultat est :
"HELLO"
Vous pouvez également enchaîner des 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”
Défi
FacileCréez une méthode nommée processValue qui prend un argument :
- Un objet (
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 en fonction des règles suivantes :
- S'il s'agit d'un Integer : renvoyer "Number: " suivi de la valeur doublée
- S'il s'agit d'une String : renvoyer "Text: " suivi de la valeur en majuscules
- S'il s'agit d'un Boolean : renvoyer "Boolean: " suivi de la valeur opposée (true devient false et inversement)
- 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 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));
}
}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
1Tableaux multidimensionnels
Bases des tableaux 2DAccès aux éléments des tableaux 2DBoucles imbriquées avec les tableaux 2DRécapitulatif - Tableaux 2DAddition et soustraction de matricesTableaux irréguliersTableaux 3D et au-delàMotifs courants des tableaux 2DRécapitulatif - Tout sur les tableaux4HashSet Partie 1
Qu'est-ce qu'un HashSet ?Ajouter un ÉlémentSupprimer un ÉlémentVérifier si un Élément ExisteVide et TailleVider et ClonerRécapitulatif - HashSet7Gestion des erreurs de base
Bases du try-catchBloc finallyLever des exceptionsExceptions personnalisées2HashMap Partie 1
Qu'est-ce qu'une HashMap ?Déclarer une HashMapAccéder aux ValeursVérifier si une Clé ExisteModifier les DictionnairesRécapitulatif - HashMap3HashMap Partie 2
Méthodes HashMapItérer avec keySet()Itérer avec entrySet()HashMap imbriquéRécapitulatif - Gérer l'entrepôtRécapitulatif - Opérations HashMap6Flux de contrôle avancé
Instructions étiquetéesExpression switchAppariement de motifsClauses de gardeRécapitulatif - Flux de contrôle9Projet - Compteur de Mots Uniques
Entrée de Texte et StockageTraitement des MotsEntraînez-vous par vous-même : Compilateur Java en ligne