Решил для себя реализовать процесс восстановления объекта (в задаче этого не требовалось). Возникло впорос:
final transient String greeting;
Это поле как-то можно адекватно восстановить в readObject()? Так как изначально это константа, я не могу написать так, как написал сейчас в коде. Тут только создавать новый экземпляр или убирать модификатор final? Или есть еще способ?package com.javarush.task.task20.task2020;
import java.io.PrintStream;
import java.io.Serializable;
import java.util.logging.Logger;
/*
Сериализация человека
*/
public class Solution {
public static class Person implements Serializable{
String firstName;
String lastName;
transient String fullName;
final transient String greeting;
String country;
Sex sex;
transient PrintStream outputStream;
transient Logger logger;
Person(String firstName, String lastName, String country, Sex sex) {
this.firstName = firstName;
this.lastName = lastName;
this.fullName = String.format("%s, %s", lastName, firstName);
this.greeting = "Hello, ";
this.country = country;
this.sex = sex;
this.outputStream = System.out;
this.logger = Logger.getLogger(String.valueOf(Person.class));
}
@Override
public String toString() {
return "Person{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", fullName='" + fullName + '\'' +
", greeting='" + greeting + '\'' +
", country='" + country + '\'' +
", sex=" + sex +
", outputStream=" + outputStream +
", logger=" + logger +
'}';
}
private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
stream.defaultReadObject();
fullName = String.format("%s, %s", lastName, firstName);
greeting = "Hello, ";
outputStream = System.out;
logger = Logger.getLogger(String.valueOf(Person.class));
}
}
enum Sex {
MALE,
FEMALE
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutput = new ObjectOutputStream(arrayOutputStream);
Person person = new Person("Иван", "Иванович", "Россия", Sex.MALE);
System.out.println(person);
objectOutput.writeObject(person);
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(arrayOutputStream.toByteArray());
ObjectInputStream objectInput = new ObjectInputStream(arrayInputStream);
System.out.println(objectInput.readObject());
}
}