繁体   English   中英

如果Serializable类中存在不可序列化的字段,将会产生什么影响?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM