Record-uri în Java 14+ — Clase Imutabile și Constructori Compacți
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
- Confuzia între getteri — record-urile nu generează getteri cu prefixul "get". Pentru
name(), nugetName(). - Încercarea de a extinde un record — record-urile sunt final, nu pot fi extinse.
- Adăugarea de câmpuri non-statice în corp — record-urile acceptă doar câmpurile din semnătură ca instance fields.
FAQ
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