gwtrpc,GWT RPC 序列化机制简单总结

0、Java的基本类型,及基本类型的包装类型都可序列化;
1、GWT RPC的方法参数类型、返回值类型和抛出异常类型必须可序列化(实现Serializable或IsSerializable接口),并且包含一个无参数的构造方法,访问修饰符无限制(可以是public、protected、default或private);
2、每个RPC接口生成一个*.gwt.rpc文件,文件内容是接口调用时可被序列化/反序列化的类的信息,不在此表中的类不可序列化/反序列化(虽可编译成功,但运行时失败);
3、如果RPC接口中的某个类型(参数、返回值或异常的类型)在整个程序中有子类(包括本module中包含的子类和inherits的module中的子类),那么这些子类的类信息都会包含在其*.gwt.rpc文件中。这样是为了保障RPC方法可序列化子类(即支持Java的多态性);
4、如果RPC接口中的某个类型是接口,那么接口信息不会包含在*.gwt.rpc文件(接口不需要序列化/反序列化),但按照规则3,其实现类的类信息会包含在*.gwt.rpc文件中;
5、如果RPC接口中的某个类型(参数、返回值或异常的类型)是泛型类型,那么泛型类型只能是接口,否则编译虽可通过,但是运行时会报不可序列化错误(原因是在Java中,泛型类型类的类型参数缺省为Object,而Object类型是不可序列化/反序列化的)。并且调用RPC接口的泛型类型的子类本身必须是一个类型参数全部确定的子类(自己不能再声明类型参数),那么这个子类会包含在RPC接口的*.gwt.rpc文件中,在程序中使用这个子类来调用RPC接口是正确的,GWT可正确序列化/反序列化
Tags:  月度总结 php序列化 java序列化 序列化 gwtrpc

延伸阅读

最新评论

发表评论