Зачем transient у fullName и greeting? При десереализации конструктор не вызывается же , значит и поля эти будут нулевые пс видел что много кто до меня задал этот вопрос, но я так и не понял по их комментам
public class Solution {

    public static class Person implements Serializable{
        String firstName;
        String lastName;
       transient String fullName;
        transient final 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));
        }
    }