到底什么时候需要 implements Serializable ,实体类必须 implements Serializable 才可以网络传输?写数据库吗?
我们都有个惯性思维,就是实体类需要 implements Serializable 以序列化,序列化有两个作用:1、序列化就是将对象属性转变为二进制数据。2、在网络上进行传输。但是我发现有个项目中实体类并没有 implements Serializable,但是依然可以保存数据库,依然可以在网络上传输。于是在网上开始寻找结果,但是看了多个解答依然不能形成知识闭环。有的说是保存对象数据的,不需要实现序列化接口。有的说以非rpc调用的可以不实现序列化接口。貌似没看到我想要的。
直到我把每个属性类型点看看了一遍,破案了。因为Java大部分的数据类型都已经实现了可序列化接口。
所以 要想存储到数据库必须实现序列化接口、要想网络传输必须实现序列化接口 ,这句话是对的,只是有的时候我们没有在类上看到 implements Serializable 也可以完成这两类操作,是因为 这个类的所有属性类型都是 Java的基本类型+引用类型。(基本类型有对应的包装类)这些类型都在内部实现了已经实现了 可序列化接口。在所有属性都是Java已经实现好可序列化的情况下类上可以不加 implements Serializable。
class Person { String name; //String类型已经实现好了可序列化接口
Integer age;//Integer类型已经实现好了可序列化接口
List <Object> ticket; //List也实现了可序列化接口
。。。
}
好,那么什么情况下就必须要加implements Serializable?才能实现存数据库+网络传输?
答:在一个类拥有自定义类型的情况下。
例如
class Person implements Serializable{ String name; Pet pet; //宠物 }
如果这样定义Person类,Pet属性是组合的其他定义类。那么就必须在类上声名implements Serializable才可以实现 数据存储+网络传输。
如有差错,请各位指正