Java Record Klassen: Ein Anfängerleitfaden

Hallo da, zukünftige Java-Entwickler! Heute werden wir eine spannende Funktion erforschen, die in Java 14 eingeführt wurde: Record Klassen. Keine Sorge, wenn du neu in der Programmierung bist – ich werde dich Schritt für Schritt durch dieses Konzept führen, genau wie ich es in meinen Jahren des Unterrichtens für unzählige Schüler getan habe. Also, nimm dir eine Tasse deines Lieblingsgetränks und lasst uns einsteigen!

Java - Record Classes

Was ist eine Java Record?

Stelle dir vor, du sammelst Baseballdoppelkarten. Jede Karte hat spezifische Informationen: der Name des Spielers, das Team und den Batting Average. In Java erstellen wir oft Klassen, um diese Art von Daten zu halten. Ein Record ist eine spezielle Art von Klasse, die dafür konzipiert ist, genau das zu tun – Daten zu halten – aber mit viel weniger Code als traditionelle Klassen.

Zweck einer Java Record

Der Hauptzweck eines Java Records ist die Vereinfachung der Erstellung von Klassen, die hauptsächlich zum Speichern von Daten verwendet werden. Es ist wie ein Helfer in der Küche, der alle deine Zutaten vorbereitet, bevor du anfängst zu kochen – Records bereiten deine Daten vor, sodass du dich auf die Verwendung in deinem Programm konzentrieren kannst.

Eigenschaften von Java Record

Lassen Sie uns sehen, was Records besonders macht:

  1. Kurze Syntax: Weniger schreiben, mehr tun!
  2. Unveränderlichkeit: Sobald erstellt, können die Daten nicht geändert werden.
  3. Automatische Methoden: Java erstellt.common Methoden für dich.
  4. Transparenz: Was du siehst, ist das, was du bekommst – keine versteckten Felder.

Beispiel Ohne Verwendung von Java Record

Bevor wir einen Record in Aktion sehen, erstellen wir eine traditionelle Klasse für unsere Baseballdoppelkarte:

public class BaseballCard {
private final String playerName;
private final String team;
private final double battingAverage;

public BaseballCard(String playerName, String team, double battingAverage) {
this.playerName = playerName;
this.team = team;
this.battingAverage = battingAverage;
}

public String getPlayerName() {
return playerName;
}

public String getTeam() {
return team;
}

public double getBattingAverage() {
return battingAverage;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
BaseballCard that = (BaseballCard) o;
return Double.compare(that.battingAverage, battingAverage) == 0 &&
Objects.equals(playerName, that.playerName) &&
Objects.equals(team, that.team);
}

@Override
public int hashCode() {
return Objects.hash(playerName, team, battingAverage);
}

@Override
public String toString() {
return "BaseballCard{" +
"playerName='" + playerName + '\'' +
", team='" + team + '\'' +
", battingAverage=" + battingAverage +
'}';
}
}

Puh! Das ist viel Code für etwas so Einfaches, nicht wahr? Jetzt lassen uns sehen, wie Records uns helfen können.

Beispiel Mit Verwendung von Java Record

Hier ist die gleiche Baseballdoppelkarte, implementiert als Record:

public record BaseballCard(String playerName, String team, double battingAverage) {}

Das ist es! Nur eine Zeile Code. Aber lass dich von ihrer Einfachheit nicht täuschen – dieser Record packt einen Schlag. Es wird automatisch erstellt:

  • Ein Konstruktor
  • Getter-Methoden für jedes Feld
  • equals(), hashCode() und toString() Methoden

Lassen uns unseren neuen Record verwenden:

public class BaseballCardDemo {
public static void main(String[] args) {
BaseballCard card = new BaseballCard("Babe Ruth", "New York Yankees", 0.342);

System.out.println(card.playerName());  // Ausgabe: Babe Ruth
System.out.println(card.team());        // Ausgabe: New York Yankees
System.out.println(card.battingAverage()); // Ausgabe: 0.342
System.out.println(card);  // Ausgabe: BaseballCard[playerName=Babe Ruth, team=New York Yankees, battingAverage=0.342]
}
}

Wie du siehst, können wir unsere BaseballCard Record genauso wie eine reguläre Klasse erstellen und verwenden, aber mit viel weniger Code!

Java Record für Versiegelte Schnittstellen

Records können auch Schnittstellen implementieren, einschließlich versiegelten Schnittstellen. Eine versiegelte Schnittstelle ist wie ein VIP-Club – sie kontrolliert, welche Klassen ihre Mitglieder sein können.

Hier ist ein Beispiel:

public sealed interface Athlete permits BaseballPlayer, BasketballPlayer {}

public record BaseballPlayer(String name, String team) implements Athlete {}
public record BasketballPlayer(String name, String team) implements Athlete {}

public class SportsDemo {
public static void main(String[] args) {
Athlete player1 = new BaseballPlayer("Mike Trout", "Los Angeles Angels");
Athlete player2 = new BasketballPlayer("LeBron James", "Los Angeles Lakers");

System.out.println(player1);  // Ausgabe: BaseballPlayer[name=Mike Trout, team=Los Angeles Angels]
System.out.println(player2);  // Ausgabe: BasketballPlayer[name=LeBron James, team=Los Angeles Lakers]
}
}

In diesem Beispiel dürfen nur BaseballPlayer und BasketballPlayer die Athlete Schnittstelle implementieren.

Überschreiben von Methoden von Java Records

Während Records automatische Implementierungen von gemeinsamen Methoden bieten, kannst du sie immer noch überschreiben, wenn nötig. Hier ist ein Beispiel:

public record BaseballCard(String playerName, String team, double battingAverage) {
@Override
public String toString() {
return playerName + " spielt für " + team + " mit einem Batting Average von " + battingAverage;
}
}

public class BaseballCardDemo {
public static void main(String[] args) {
BaseballCard card = new BaseballCard("Babe Ruth", "New York Yankees", 0.342);
System.out.println(card);  // Ausgabe: Babe Ruth spielt für New York Yankees mit einem Batting Average von 0.342
}
}

Hier haben wir die toString() Methode überschrieben, um eine lesbarere Ausgabe zu bieten.

Schlussfolgerung

Java Records sind ein leistungsstarkes Werkzeug zur Erstellung einfacher, datenfokussierter Klassen mit minimalem Boilerplate-Code. Sie sind perfekt, wenn du zusammenhängende Teile von Daten zusammenfassen musst, wie in unserem Beispiel der Baseballdoppelkarte.

Denke daran, Programmierung ist wie das Lernen eines Instruments – es erfordert Übung. Also versuche, deine eigenen Records für verschiedene Arten von Daten zu erstellen. Vielleicht erstelle ein BookRecord oder ein MovieRecord. Je mehr du übst, desto mehr wirst du mit diesem Konzept vertraut.

Fahre fort zu coden, weiterzulernen und vor allem, hab Spaß! Wer weiß, vielleicht erstellst du eines Tages einen Java Record, um Daten über dein eigenes Bestseller-Programmierbuch zu speichern. Träume groß, code größer!

Credits: Image by storyset