Wann ist ein Datensatz kein Werttyp?Java

Java-Forum
Anonymous
 Wann ist ein Datensatz kein Werttyp?

Post by Anonymous »

Einführung
Jep 401 führt „Wertklassen“ in die Programmiersprache Java ein. Als solche haben sie keine Identität, da ihr inhärenter Zustand vollständig beschreibt, was sie sind. Die Nichtziele dieses JEP enthalten den folgenden Punkt:

Es ist kein Ziel, vorhandene Klassen automatisch als Wertklassen zu behandeln, auch wenn sie einige Merkmale von Wertklassen gemeinsam haben. [...]

Um nun eine vorhandene Klasse oder einen vorhandenen Datensatz als „Wertklasse“ zu markieren, müssen Sie einfach das Schlüsselwort value new voranstellen, und voilà, es verliert seine Identität. Da habe ich mich gefragt:
F: Wann ist ein Datensatz kein Werttyp?
Das JEP geht darauf nicht wirklich ein. Es heißt nur:

Entwickler können ihre eigenen Wertklassen deklarieren, indem sie den Wertmodifikator auf jede Klasse anwenden, deren Instanzen unveränderlich und austauschbar sein sollen:
  • Unveränderlich: Alle Instanzfelder der Klasse sollten endgültig sein, und der durch eine Instanz dargestellte Domänenwert ändert sich im Laufe der Zeit nicht; und
  • Austauschbar: Es ist nicht notwendig, zwischen zwei separat erstellten Instanzen zu unterscheiden, die denselben Domänenwert darstellen.
[...]
Datensatzklassen sind endgültig und alle ihre Felder sind endgültig, daher sind sie oft gute Kandidaten für Wertklassen.

Brian Goetz, einer der Java-Spracharchitekten, beschreibt Datensätze häufig als „die Daten, die gesamten Daten und nichts als die Daten“. Aber wenn Datensätze wirklich „nichts als die Daten“ sind, bedeutet das nicht, dass sie keine „zusätzliche“ Identität haben sollten; Was, zumindest in meinem mentalen Modell, nur ein unsichtbares Feld ist, das einen Wert enthält, der leicht dem Ergebnis von System.identityHashCode(this) entspricht?
Weiteres
  • Was sind einige reale Anwendungsfälle für Datensätze, die keine wertbasierten Typen sind?
  • (Warum) ist java.lang.Enum (nicht) ein guter Kandidat für eine Wertklasse?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post