How can I serialize an interface?
java, oop, serialization, types
Solution
Java's `Serializable` does this for you automatically.
public class SerializeInterfaceExample {
interface Shape extends Serializable {}
static class Circle implements Shape {
private static final long serialVersionUID = -1306760703066967345L;
}
static class ShapeHolder implements Serializable {
private static final long serialVersionUID = 1952358793540268673L;
public Shape shape;
}
@Test public void canSerializeShape()
throws FileNotFoundException, IOException, ClassNotFoundException {
ShapeHolder circleHolder = new ShapeHolder();
circleHolder.shape = new Circle();
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("test"));
out.writeObject(circleHolder);
out.close();
ObjectInputStream in = new ObjectInputStream(new FileInputStream("test"));
final ShapeHolder restoredCircleHolder = (ShapeHolder) in.readObject();
assertThat(restoredCircleHolder.shape, instanceOf(Circle.class));
in.close();
}
}
Problem
Suppose I have a `Serializable` class `ShapeHolder` that owns an object that implements a `Serializable` `Shape` interface. I want to make sure the correct concrete shape object is saved (and the correct type is later restored). How can I accomplish this? ``` interface Shape extends Serializable {} class Circle implements Shape { private static final long serialVersionUID = -1306760703066967345L; } class ShapeHolder implements Serializable { private static final long serialVersionUID = 1952358793540268673L; public Shape shape; } ```