Die Enum-Klasse ist serialisierbar, sodass es kein Problem gibt, Objekte mit Enums zu serialisieren. Der andere Fall ist, wenn die Klasse Felder der Klasse java.util.Optional enthält. In diesem Fall wird die folgende Ausnahme ausgelöst: java.io.NotSerializableException: java.util.Optional
Wie gehe ich mit solchen Klassen um, wie serialisiere ich sie? Ist es möglich, solche Objekte an Remote EJB oder über RMI zu senden?
Dies ist das Beispiel:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Optional;
import org.junit.Test;
public class SerializationTest {
static class My implements Serializable {
private static final long serialVersionUID = 1L;
Optional<Integer> value = Optional.empty();
public void setValue(Integer i) {
this.i = Optional.of(i);
}
public Optional<Integer> getValue() {
return value;
}
}
//java.io.NotSerializableException is thrown
@Test
public void serialize() {
My my = new My();
byte[] bytes = toBytes(my);
}
public static <T extends Serializable> byte[] toBytes(T reportInfo) {
try (ByteArrayOutputStream bstream = new ByteArrayOutputStream()) {
try (ObjectOutputStream ostream = new ObjectOutputStream(bstream)) {
ostream.writeObject(reportInfo);
}
return bstream.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
NotSerializableException,
natürlich eine bekommen.
Optional
markiert alsSerializable
, was würde dann passieren, wennget()
etwas zurückgegeben würde, das nicht serialisierbar war?