Kelas Enum adalah Serializable sehingga tidak ada masalah untuk membuat serial objek dengan enum. Kasus lainnya adalah di mana kelas memiliki bidang kelas java.util.Optional. Dalam kasus ini, pengecualian berikut akan ditampilkan: java.io.NotSerializableException: java.util.Optional
Bagaimana menangani kelas-kelas seperti itu, bagaimana cara membuatnya bersambung? Apakah mungkin mengirim objek tersebut ke Remote EJB atau melalui RMI?
Ini contohnya:
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,
kursus.
Optional
ditandai sebagaiSerializable
, lalu apa yang akan terjadi jikaget()
mengembalikan sesuatu yang tidak dapat diserialkan?