INTRODUZIONE AI RECORD ED ALLE CLASSI SEALED IN JAVA


Con il rilascio di Java 14 (marzo 2020), è stato introdotto un nuovo tipo di classe chiamato record. I record sono stati progettati per semplificare la creazione di classi che principalmente contengono dati. Inoltre, con Java 15 è stato introdotto anche il modificatore sealed per le classi, offrendo un controllo maggiore su come le classi possono essere estese. Esploriamo questi concetti in dettaglio, con esempi pratici.


Cos'è un Record in Java?

Un record è un tipo speciale di classe introdotto per rappresentare dati immutabili. In pratica, un record è una classe compatta e concisa che gestisce automaticamente le sue componenti principali come il costruttore, i metodi equals, hashCode e toString, il tutto senza la necessità di definire manualmente questi elementi (come suggeruti da un mio caro collega, con il record abbiamo un lombok nativo).

I record sono ideali per rappresentare semplici strutture di dati come modelli di risposta API, coordinate o coppie di valori.

Quando e perché usare i Record

I record possono essere usati quando si ha bisogno di una classe che memorizzi principalmente dati e che non richieda comportamenti complessi. Sono utili soprattutto per rappresentare tipi immutabili, come per esempio i modelli di dati per applicazioni web, dove è frequente la necessità di mantenere entità semplici e leggere.

Nota: I record non possono estendere altre classi (anche se possono implementare interfacce) e sono di default final, il che li rende immutabili.

Sintassi dei Record

Creare un record in Java è semplice e richiede poche righe di codice. Ecco un esempio pratico:

public record Point(int x, int y) {}

Con una sola riga, abbiamo creato una classe immutabile Point con due proprietà: x e y. Questa definizione genera automaticamente il costruttore, i metodi equals, hashCode, e toString.

Esempio Completo con Record

Consideriamo un esempio concreto con un record chiamato Person:

public record Person(String name, int age) {
    // È possibile aggiungere logica personalizzata, ad esempio un costruttore
    public Person {
        if (age < 0) {
            throw new IllegalArgumentException("L'eta non può essere negativa");
        }
    }
}

In questo caso, Person ha due campi (name e age). Il costruttore ci consente anche di inserire logica di validazione per i campi (ad esempio, impedire che l’età sia negativa).


Cos'è una Classe Sealed in Java?

Il modificatore sealed è stato introdotto in Java 15 come funzionalità sperimentale e reso stabile in Java 17. Questo modificatore permette di limitare le classi che possono estendere una classe specifica, offrendo così un controllo maggiore sulla gerarchia di ereditarietà.

Le classi sealed sono utili quando si desidera creare un'interfaccia o una classe che solo alcune sottoclassi ben definite possono implementare o estendere. Questo è particolarmente utile per creare gerarchie di tipi limitati e chiari, evitando estensioni incontrollate che potrebbero causare bug o rendere il codice difficile da mantenere.

Sintassi delle Classi Sealed

Per definire una classe sealed, si utilizza il modificatore sealed e si specificano le classi che possono estenderla tramite la parola chiave permits. Le sottoclassi di una classe sealed devono essere dichiarate come final, non-sealed (cioè possono essere estese ulteriormente), oppure sealed a loro volta.

Esempio Completo con Classe Sealed

Immaginiamo di voler creare una gerarchia di veicoli limitata a tre tipi di mezzi: Car, Bike, e Truck.

public sealed class Vehicle permits Car, Bike, Truck {
    private final String brand;

    public Vehicle(String brand) {
        this.brand = brand;
    }

    public String getBrand() {
        return brand;
    }
}

public final class Car extends Vehicle {
    public Car(String brand) {
        super(brand);
    }
}

public final class Bike extends Vehicle {
    public Bike(String brand) {
        super(brand);
    }
}

public final class Truck extends Vehicle {
    public Truck(String brand) {
        super(brand);
    }
}

In questo esempio:

  1. La classe Vehicle è dichiarata sealed e specifica che solo Car, Bike, e Truck possono estenderla.
  2. Ogni sottoclasse (Car, Bike, Truck) è dichiarata final, il che impedisce ulteriori estensioni.

Conclusione

L'introduzione dei record e delle classi sealed in Java ha reso il linguaggio più espressivo e conciso, migliorando la manutenibilità e la sicurezza del codice. I record sono ideali per rappresentare dati semplici e immutabili, mentre le classi sealed consentono un controllo accurato sulla gerarchia di ereditarietà.

Con queste nuove funzionalità, Java ha semplificato la creazione di classi per strutture dati e gerarchie sicure, riducendo il codice boilerplate e facilitando la scrittura di codice più sicuro e manutenibile.

Comments

Popular posts from this blog

AGGIORNAMENTO INVESTIMENTI 2° TRIMESTRE 2024

AGGIORNAMENTO INVESTIMENTI 1° TRIMESTRE 2024

HO COMPRATO UNO XIOAMI 14 ULTRA