Menu
Coddy logo textTech

Riepilogo - Utente validato

Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 63 di 87.

challenge icon

Sfida

Facile

Costruiamo un sistema completo di registrazione degli utenti che convalida i dati di input e usa eccezioni personalizzate per comunicare esattamente cosa è andato storto! Combinerai tutto ciò che hai imparato in questo capitolo: eccezioni checked e unchecked personalizzate, la gerarchia delle eccezioni e try-with-resources con un validatore auto-closeable.

Organizzerai il codice in cinque file:

  • ValidationException.java: crea un’eccezione checked che funge da base per tutti gli errori di convalida. Questa eccezione deve estendere Exception e includere un costruttore che accetta un messaggio.
  • InvalidUsernameException.java: crea un’eccezione checked per gli errori di convalida del nome utente. Deve estendere la tua classe ValidationException, creando una piccola gerarchia di eccezioni. Includi un costruttore che accetta un messaggio e lo passa alla classe genitore.
  • InvalidAgeException.java: crea un’eccezione unchecked per gli errori relativi all’età (come le età negative, che rappresentano errori di programmazione). Deve estendere RuntimeException e avere un costruttore che accetta un messaggio.
  • UserValidator.java: crea una classe che implementa AutoCloseable per simulare una sessione di convalida che deve essere chiusa correttamente. Il tuo validatore deve:

    Stampare Validator session started nel costruttore.

    Avere un metodo validateUsername(String username) che genera InvalidUsernameException se il nome utente è null, vuoto o contiene meno di 3 caratteri (con il messaggio "Username must be at least 3 characters"). Altrimenti, stampare Username '[username]' is valid.

    Avere un metodo validateAge(int age) che genera InvalidAgeException se l’età è negativa (con il messaggio "Age cannot be negative: [age]"). Se l’età è inferiore a 13, genera ValidationException con il messaggio "Must be at least 13 years old". Altrimenti, stampa Age [age] is valid.

    Implementare close() per stampare Validator session closed.

  • Main.java: metti insieme il tuo sistema di convalida! Riceverai due input: un nome utente (String) e un’età (intero).

    Usa try-with-resources per creare un UserValidator. All’interno del blocco try, convalida prima il nome utente e poi l’età. Se entrambe le convalide hanno esito positivo, stampa User registration successful!

    Intercetta InvalidUsernameException e stampa Username error: [message]. Intercetta InvalidAgeException e stampa Age error: [message]. Intercetta ValidationException (la classe genitore) e stampa Validation error: [message].

    Il validatore deve chiudersi automaticamente, indipendentemente dall’esito positivo o negativo della convalida!

Riceverai due input, nell’ordine seguente: nome utente (String) ed età (intero).

Questa sfida riunisce tutto il capitolo: creerai una gerarchia di eccezioni con ValidationException come classe genitore, userai correttamente sia le eccezioni checked sia quelle unchecked e ti assicurerai che la risorsa del validatore venga sempre rilasciata con try-with-resources. Nota come intercettare la classe genitore ValidationException dopo la sua classe figlia InvalidUsernameException ti permetta di gestire prima i casi specifici, continuando comunque a intercettare gli altri errori di convalida!

Provalo tu

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leggi gli input
        String username = scanner.nextLine();
        int age = scanner.nextInt();
        
        // TODO: Usa try-with-resources per creare un UserValidator
        // All'interno del blocco try:
        //   1. Convalida lo username
        //   2. Convalida l'età
        //   3. Se entrambe le convalide riescono, stampa "User registration successful!"
        
        // TODO: Intercetta InvalidUsernameException e stampa "Username error: [message]"
        
        // TODO: Intercetta InvalidAgeException e stampa "Age error: [message]"
        
        // TODO: Intercetta ValidationException (classe padre) e stampa "Validation error: [message]"
        
        // Nota: il validator deve chiudersi automaticamente, sia in caso di successo sia in caso di errore!
    }
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Java online