Я могу сериализовать массив в файл, но у меня возникают проблемы с десериализацией объекта из файла в Java. Вот мой код:
Форма. java
public interface Shape {
String toString();
}
Прямоугольник. java
import java.io.Serializable;
public class Rectangle implements Shape, Serializable {
private double length;
private double width;
public Rectangle(double width, double length) {
this.width = width;
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
@Override
public String toString() {
return "Rectangle{" +
"width=" + width +
", length=" + length +
'}';
}
}
Круг. java
import java.io.Serializable;
public class Circle implements Shape, Serializable {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public String toString() {
return "Circle{" +
"radius=" + radius +
'}';
}
}
Shapes. java
import java.io.Serializable;
import java.util.ArrayList;
public class Shapes implements Serializable {
private ArrayList<Shape> shapeList = new ArrayList<>();
public Shapes() {
}
public Shapes(ArrayList<Shape> shapeList) {
this.shapeList = shapeList;
}
public ArrayList<Shape> getShapeList() {
return shapeList;
}
public void setShapeList(ArrayList<Shape> shapeList) {
this.shapeList = shapeList;
}
@Override
public String toString() {
return "Shapes{" +
"shapeList=" + shapeList +
'}';
}
public void add(Shape shape) {
shapeList.add(shape);
}
}
Main. java
import java.io.*;
import java.util.ArrayList;
public class Main extends Thread {
public static void main(String[] args) {
Shapes shapes = new Shapes();
Rectangle r1 = new Rectangle(5, 10);
Rectangle r2 = new Rectangle(12, 15);
Circle c1 = new Circle(5);
Circle c2 = new Circle(8);
shapes.add(r1);
shapes.add(r2);
shapes.add(c1);
shapes.add(c2);
// Serialization
try {
FileOutputStream streamOut = new FileOutputStream("./obj.ser");
ObjectOutputStream objectOutput = new ObjectOutputStream(streamOut);
objectOutput.writeObject(r1);
objectOutput.close();
streamOut.close();
} catch (IOException e) {
System.out.println(e);
}
System.out.println();
// DeSerialization
Shapes shapes2 = new Shapes();
try {
FileInputStream streamIn = new FileInputStream("./obj.ser");
ObjectInputStream objectInput = new ObjectInputStream(streamIn);
shapes2 = (Shapes) objectInput.readObject();
objectInput.close();
streamIn.close();
} catch (IOException | ClassNotFoundException e) {
System.out.println(e);
return;
}
System.out.println(shapes2.toString());
}
}
Я не знаю, как исправить ошибку, показанную в команде:
Исключение в потоке "main" java .lang.ClassCastException: класс Rectangle не может быть приведен к классу Shapes (Rectangle и Shapes находятся в безымянном модуле загрузчика 'app') в Main.main (Main. java: 74)