Menu
Coddy logo textTech

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”

challenge icon

Sfida

Facile

Crea un metodo chiamato processValue che accetta un argomento:

  1. 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));
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Java online