💡 1. Kapselung & Moderne Records
Java 16 führte `record` als transparente, unveränderliche Datenträgerklasse ein. Boilerplate wie Getter, `equals()`, `hashCode()` und `toString()` entfallen komplett:
// Klassische Kapselung:
public class UserDto {
private final String username;
private final String email;
public UserDto(String username, String email) {
this.username = Objects.requireNonNull(username);
this.email = Objects.requireNonNull(email);
}
public String getUsername() { return username; }
public String getEmail() { return email; }
}
// Moderner Java 16+ Record (identische Funktionalität in 1 Zeile!):
public record UserRecord(String username, String email) {
// Kompakter Konstruktor für Validierung:
public UserRecord {
Objects.requireNonNull(username, "Username darf nicht null sein");
}
}
Ohne Kapselung kann jeder Passant direkt ins Bankgewölbe greifen. Mit `private` und Settern steht ein Sicherheitsbeamter am Eingang, der jede Einzahlung auf Falschgeld prüft.
⚡ 2. Quick-Cheat-Sheet
| Feature | Klassische Klasse | Java Record |
|---|---|---|
| Mutierbarkeit | Frei wählbar (mutable/immutable) | Streng immutable (Felder sind final) |
| Getter-Syntax | getName() | name() (ohne get-Präfix) |
| equals & hashCode | Muss manuell generiert werden | Automatisch wertbasiert generiert |
| Vererbung | Erweiterbar mit extends | Final (kann keine Klassen erweitern) |
⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)
Bei Records heißen die Zugriffsmethoden wie die Komponenten selbst: user.email(), NICHT user.getEmail()!
Enthält ein Record eine veränderliche `List`, kann der Inhalt der Liste trotzdem mutiert werden. Nutze `List.copyOf()` im kompakten Konstruktor!
🧠 4. Diagnostischer Selbst-Check
Überprüfe dein Verständnis von Sprach-Features, Speicherverwaltung und Enterprise-Architektur, bevor du den Code in der Web-IDE schreibst.