Skip to content

Record-uri în Java 14+ — Clase Imutabile și Constructori Compacți

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Record. We cover key concepts, practical examples, and best practices.

Record-urile sunt un tip special de clasă introdus în Java 14 (preview) și stabilizat în Java 16, care declară automat constructor, getteri, equals, hashCode și toString pe baza câmpurilor din semnătură, eliminând boilerplate-ul claselor imutabile.

The Problem

Clasele imutabile (POJO-uri cu getteri, equals, hashCode, toString) necesită mult cod boilerplate. Acest quick-fix îți arată cum să folosești record-uri pentru a scrie clase de date într-o singură linie.

The Wrong Way

// 30+ linii de boilerplate
public class Person {
    private final String name;
    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public int getAge() { return age; }

    @Override
    public boolean equals(Object o) { ... }
    @Override
    public int hashCode() { ... }
    @Override
    public String toString() { ... }
}

The Right Way

public record Person(String name, int age) { }

Output:

Person[name=Ana, age=25]  // toString auto-generat

Step-by-Step Fix

1. Declară un record

public record Point(int x, int y) { }
// Constructor, getteri (x(), y()), equals, hashCode, toString — toate auto-generate

2. Adaugă un constructor compact

public record Person(String name, int age) {
    public Person {
        if (age < 0) {
            throw new IllegalArgumentException("Age must be positive");
        }
    }
}

3. Adaugă metode și câmpuri statice

public record Rectangle(double width, double height) {
    public static final Rectangle SQUARE_UNIT = new Rectangle(1, 1);

    public double area() {
        return width * height;
    }
}

Prevention Tips

  • Record-urile sunt implicit imutabile — nu poți modifica câmpurile după creare
  • Nu poți extinde un record (sunt implicit final)
  • Poți implementa interfețe cu record-uri
  • Folosește record-uri pentru DTO-uri, valori returnate, chei în map-uri

Common Mistakes

  1. Confuzia între getteri — record-urile nu generează getteri cu prefixul "get". Pentru name(), nu getName().
  2. Încercarea de a extinde un record — record-urile sunt final, nu pot fi extinse.
  3. Adăugarea de câmpuri non-statice în corp — record-urile acceptă doar câmpurile din semnătură ca instance fields.

FAQ

### Ce este un record în Java?

Un tip special de clasă care declară automat toate metodele standard pentru un set fix de câmpuri: constructor, getteri, equals, hashCode, toString.

Care e diferența dintre un record și o clasă normală?

Record-urile sunt implicit imutabile, finale și au toate metodele auto-generate. Clasele normale oferă mai multă flexibilitate.

Pot adăuga validare într-un record?

Da, prin constructorul compact: public Record { if (cond) throw ...; }. Se execută după asignarea implicită a câmpurilor.

Construit de dezvoltatorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu Java pentru productivitate și securitate sporite.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro