上一篇文章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 來傳送資料了!
創作者介紹

zwai 小窩

zwai 發表在 痞客邦 PIXNET 留言(0) 人氣()