Рекомендация Клас Solution має підтримувати інтерфейс Serializable
Але в моєму випадку я не використовую .defaultWriteObject(); а використовую кастомну реалізацію і стосовно цього в специфікації Java
If an instance of an inner class is Serializable, the containing outer class must also be Serializable unless the inner class is static or serialization is customized.
І відповідно повинно пройти рішення але :) шо маємо то маємо.
package ua.javarush.task.task20.task2018;
import java.io.*;
/*
Знайди помилки
*/
public class Solution {
public static class A {
protected String nameA = "A";
public A(String nameA) {
this.nameA += nameA;
}
public A() {
}
}
public class B extends A implements Serializable {
private String nameB;
public B(String nameA, String nameB) {
super(nameA);
this.nameA += nameA;
this.nameB = nameB;
}
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.writeObject(this.nameA);
oos.writeObject(this.nameB);
}
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
this.nameA = (String) ois.readObject();
this.nameB = (String) ois.readObject();
}
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(arrayOutputStream);
Solution solution = new Solution();
B b = solution.new B("B2", "C33");
System.out.println("nameA: " + b.nameA + ", nameB: " + b.nameB);
oos.writeObject(b);
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(arrayOutputStream.toByteArray());
ObjectInputStream ois = new ObjectInputStream(arrayInputStream);
B b1 = (B) ois.readObject();
System.out.println("nameA: " + b1.nameA + ", nameB: " + b1.nameB);
}
}