Das vorübergehende Schlüsselwort in Java

1. Einleitung

In diesem Artikel werden wir zuerst das vorübergehende Schlüsselwort verstehen und dann sein Verhalten anhand von Beispielen sehen.

2. Verwendung von Transienten

Lassen Sie uns zunächst die Serialisierung verstehen, bevor Sie zu Transient übergehen, wie sie im Zusammenhang mit der Serialisierung verwendet wird.

Bei der Serialisierung wird ein Objekt in einen Bytestrom konvertiert, und bei der Deserialisierung ist das Gegenteil der Fall .

Wenn wir eine Variable als transient markieren , wird diese Variable nicht serialisiert . Daher ignoriert der Serialisierungsprozess den ursprünglichen Wert der Variablen und speichert Standardwerte für diesen Datentyp.

Das vorübergehende Schlüsselwort ist in einigen Szenarien nützlich:

  • Wir können es für abgeleitete Felder verwenden
  • Dies ist nützlich für Felder, die nicht den Status des Objekts darstellen
  • Wir verwenden es für nicht serialisierbare Referenzen

3. Beispiel

Um es in Aktion zu sehen, erstellen wir zunächst eine Buchklasse , deren Objekt wir serialisieren möchten:

public class Book implements Serializable { private static final long serialVersionUID = -2936687026040726549L; private String bookName; private transient String description; private transient int copies; // getters and setters }

Hier haben wir Beschreibung und Kopien als Übergangsfelder markiert .

Nach dem Erstellen der Klasse erstellen wir ein Objekt dieser Klasse:

Book book = new Book(); book.setBookName("Java Reference"); book.setDescription("will not be saved"); book.setCopies(25);

Jetzt serialisieren wir das Objekt in eine Datei:

public static void serialize(Book book) throws Exception { FileOutputStream file = new FileOutputStream(fileName); ObjectOutputStream out = new ObjectOutputStream(file); out.writeObject(book); out.close(); file.close(); }

Lassen Sie uns das Objekt jetzt aus der Datei deserialisieren:

public static Book deserialize() throws Exception { FileInputStream file = new FileInputStream(fileName); ObjectInputStream in = new ObjectInputStream(file); Book book = (Book) in.readObject(); in.close(); file.close(); return book; }

Schließlich überprüfen wir die Werte des Buchobjekts :

assertEquals("Java Reference", book.getBookName()); assertNull(book.getDescription()); assertEquals(0, book.getCopies());

Hier sehen wir, dass bookName ordnungsgemäß beibehalten wurde. Andererseits hat das Kopierfeld den Wert 0 und die Beschreibung ist null - die Standardwerte für die jeweiligen Datentypen - anstelle der ursprünglichen Werte.

4. Verhalten mit final

Sehen wir uns nun einen Sonderfall an, in dem wir transient mit dem endgültigen Schlüsselwort verwenden. Dazu fügen wir zunächst ein letztes vorübergehendes Element in unsere Book- Klasse ein und erstellen dann ein leeres Book- Objekt:

public class Book implements Serializable { // existing fields private final transient String bookCategory = "Fiction"; // getters and setters }
Book book = new Book();

Wenn wir die Werte nach der Deserialisierung überprüfen, werden wir feststellen, dass der Übergang für dieses Feld ignoriert wurde und der ursprüngliche Wert beibehalten wurde :

assertEquals("Fiction", book.getBookCategory());

5. Schlussfolgerung

In diesem Artikel haben wir die Verwendung des Schlüsselworts transient und sein Verhalten bei der Serialisierung und Deserialisierung gesehen. Wir haben auch das unterschiedliche Verhalten mit dem endgültigen Schlüsselwort gesehen.

Wie immer ist der gesamte Code auf GitHub verfügbar.