Corrispondenza dei pattern
Fa parte della sezione Logica e flusso del percorso Java di Coddy. Lezione 37 di 59.
Il pattern matching in Java ti permette di verificare se un oggetto ha un tipo specifico e di estrarne i componenti. Semplifica le operazioni di controllo dei tipi e di conversione del tipo.
Vediamo come usare il pattern matching con instanceof:
Object obj = "Hello";
if (obj instanceof String str) {
// str viene convertita automaticamente in String
System.out.println(str.toUpperCase());
}Dopo aver eseguito il codice qui sopra, l'output è:
"HELLO"
Puoi anche concatenare i controlli di corrispondenza dei pattern con 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";
}Dopo aver eseguito il codice precedente, result contiene:
“Number: 42”
Sfida
FacileCrea un metodo chiamato processValue che accetta un argomento:
- Un Object (
value) che può essere di diversi tipi
Il metodo dovrebbe usare il pattern matching con instanceof per elaborare il valore e restituire una stringa in base a queste regole:
- Se è un Integer: restituisci "Number: " seguito dal valore raddoppiato
- Se è uno String: restituisci "Text: " seguito dal valore in maiuscolo
- Se è un Boolean: restituisci "Boolean: " seguito dal valore opposto (true diventa false e viceversa)
- Per qualsiasi altro tipo: restituisci "Unknown"
Provalo tu
import java.util.Scanner;
public class Main {
public static String processValue(Object value) {
// TODO: Usa il pattern matching con instanceof per elaborare il valore
// Se è un Integer: restituisci "Number: " + (value * 2)
// Se è una String: restituisci "Text: " + value.toUpperCase()
// Se è un Boolean: restituisci "Boolean: " + (!value)
// Per qualsiasi altro tipo: restituisci "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));
}
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Array multidimensionali
Concetti di base degli array 2DAccesso agli elementi degli array 2DCicli annidati con array 2DRiepilogo - Array 2DAddizione e sottrazione di matriciArray irregolariArray 3D e oltreSchemi comuni degli array 2DRiepilogo - Tutto sugli array4HashSet Parte 1
Che cos'è un HashSet?Aggiungere un elementoRimuovere un elementoVerificare se un elemento esisteVuoto e dimensioneSvuotare e clonareRipasso - HashSet7Gestione di base degli errori
Nozioni di base su try-catchBlocco finallyLancio di eccezioniEccezioni personalizzate2HashMap Parte 1
Che cos'è una HashMap?Dichiarare una HashMapAccedere ai valoriVerificare se una chiave esisteModificare i dizionariRiepilogo - HashMap3HashMap Parte 2
Metodi di HashMapIterare con keySet()Iterare con entrySet()HashMap annidateRiepilogo - Gestire il magazzinoRiepilogo - Operazioni con HashMap6Flusso di controllo avanzato
Istruzioni con etichettaEspressione switchCorrispondenza dei patternClausole guardiaRiepilogo - Flusso di controllo9Progetto - Contatore di parole uniche
Inserimento e memorizzazione del testoElaborazione delle paroleEsercitati da solo: Compilatore Java online