La clase Enum es serializable, por lo que no hay ningún problema para serializar objetos con enumeraciones. El otro caso es donde la clase tiene campos de clase java.util.Optional. En este caso, se lanza la siguiente excepción: java.io.NotSerializableException: java.util.Optional
¿Cómo lidiar con tales clases, cómo serializarlas? ¿Es posible enviar tales objetos a Remote EJB oa través de RMI?
Este es el ejemplo:
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,
por supuesto.
Optional
se marcó comoSerializable
, ¿qué pasaría si seget()
devolviera algo que no se puede serializar?