В Java переходные
поля исключаются в процессе сериализации. Короче говоря, когда мы сохраняем объект в файл (сериализация), все переходные
поля игнорируются.
1. POJO + переходный
Просмотрите следующий Человек
класс; поле “Зарплата” является временным
.
public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; // ignore this field private transient BigDecimal salary; //... }
2. Сериализация
2.1 Во время сериализации временное поле зарплата
будет исключено.
package com.mkyong.io.object; import java.io.*; import java.math.BigDecimal; public class ObjectUtils { public static void main(String[] args) throws IOException, ClassNotFoundException { Person person = new Person("mkyong", 40, new BigDecimal(900)); // object -> file try (FileOutputStream fos = new FileOutputStream("person.obj"); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(person); oos.flush(); } Person result = null; // file -> object try (FileInputStream fis = new FileInputStream("person.obj"); ObjectInputStream ois = new ObjectInputStream(fis)) { result = (Person) ois.readObject(); } System.out.println(result); } }
Выход
Person{name='mkyong', age=40, salary=null}
2.2 Теперь мы удалили ключевое слово transient
.
public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; private BigDecimal salary; //... }
Повторите его, на этот раз отобразится поле зарплата.
Person{name='mkyong', age=40, salary=900}
Сделано.
Скачать Исходный Код
$клон git https://github.com/mkyong/core-java.git
$cd java-ввод-вывод
Рекомендации
- Спецификация Сериализации Объектов Java
- Сериализуемый JavaDoc
- Java – Что такое serialVersionUID
- Примеры сериализации Java
Оригинал: “https://mkyong.com/java/java-what-is-transient-fields/”