上一篇文章Google Web Toolkit (2) - 實作 Remote Procedure Calls (RPC)介紹了 Remote Procedure Calls 在 GWT 裡要怎麼使用。不過 RPC 中,Method 的參數與傳回值都必須滿足 serializable。會有這些限制,是因為 server 端執行的是 Java,一些複雜的物件在 client 端的 JavaScript 中不一定可以使用。為了方便,GWT 乾脆列出了限制,滿足條件的就是 Serializable Types。
定義如下:
A type is serializable and can be used in a service interface if it
* is primitive, such as char, byte, short, int, long, boolean, float, or double;
* is String, Date, or a primitive wrapper such as Character, Byte, Short, Integer, Long, Boolean, Float, or Double;
* is an array of serializable types (including other serializable arrays);
* is a serializable user-defined class; or
* has at least one serializable subclass
所以簡單來說,不可以使用 Object,只能用上述規定的 type。
而一個 class 是否 serializable,定義如下:
A user-defined class is serializable if
1. it is assignable to IsSerializable or Serializable, either because it directly implements one of these interfaces or because it derives from a superclass that does
2. all non-final, non-transient instance fields are themselves serializable, and
3. it has a public default (zero argument) constructor
這個比較值得需要注意,type 注意一下就不會出錯,不過我們實際上還是會包成一個 class 來傳才方便,因此必須建立 serializable class,也是我之前一直錯誤的地方,就是文件沒看清楚 XD。我自己也是參考上面,定義的 class 實作 IsSerializable 這個 interface,裡面就可以包各種 function,另外記得要給個沒有參數的 constructor,之前也在這裡出錯過 XD。搞定 serializable class 後,就可以放心的使用 RPC 來傳送資料了!
定義如下:
A type is serializable and can be used in a service interface if it
* is primitive, such as char, byte, short, int, long, boolean, float, or double;
* is String, Date, or a primitive wrapper such as Character, Byte, Short, Integer, Long, Boolean, Float, or Double;
* is an array of serializable types (including other serializable arrays);
* is a serializable user-defined class; or
* has at least one serializable subclass
所以簡單來說,不可以使用 Object,只能用上述規定的 type。
而一個 class 是否 serializable,定義如下:
A user-defined class is serializable if
1. it is assignable to IsSerializable or Serializable, either because it directly implements one of these interfaces or because it derives from a superclass that does
2. all non-final, non-transient instance fields are themselves serializable, and
3. it has a public default (zero argument) constructor
這個比較值得需要注意,type 注意一下就不會出錯,不過我們實際上還是會包成一個 class 來傳才方便,因此必須建立 serializable class,也是我之前一直錯誤的地方,就是文件沒看清楚 XD。我自己也是參考上面,定義的 class 實作 IsSerializable 這個 interface,裡面就可以包各種 function,另外記得要給個沒有參數的 constructor,之前也在這裡出錯過 XD。搞定 serializable class 後,就可以放心的使用 RPC 來傳送資料了!
全站熱搜
留言列表