[英]What will be the impact if there is a non serializable field in a Serializable class?
我正在做一些代码审查,并遇到了包含一个不可序列化字段的可序列化类。 该字段均未声明为transient 。 这种代码可以称为代码气味吗? 如果是,那为什么呢?
public class A implements Serializable{
private B field ; // B is non serializable
}
如果对象的执行时间类型不可序列化,则在尝试对其进行序列化时将引发异常。
例如,这确实序列化了:
导入java.io. *;
public class Test implements Serializable {
private Object object;
public static void main(String[] args) throws Exception {
Test test = new Test();
test.object = "";
// Now serialize test
}
}
这将创建一个适当的文件-但如果将test.object
设置为new Object()
,则它将引发异常。
这不仅是代码的味道-这是一个错误,除非B
是一个抽象类并且所有具体的子类都可以序列化...或者您知道其他方式,除非field
的值可以序列化或为null,否则它将永远不会序列化。
当您尝试序列化对象时,这将是一个例外(除非字段为null或实际对象是B
的可序列化子类的对象)。
您必须使其成为瞬态的或可序列化的(或实现自己的序列化方法)。
不是该字段,而是此字段指向的对象可能导致NotSerializableException。 例如,如果field
为null,则不会有异常。 否则,如果field
指向C的实例,而C的实例是B的可序列化的子类,则不会例外。
如果您尝试序列化A
将导致错误。 因为B
不可序列化。 是代码味道。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.