RpcMap is used to workaround a part of GWT RPC system.
The GWT RPC rebinder generates field serializers for every type that is assignable to any type in the RPC interfaces.
If BaseModel was to use "Map<String, Serializable> map" this would trigger the RPC system to generate field serializers for EVERY Serializable type in your GWT Module's class path.
Therefore BaseModel uses "Map<String, RpcField> map" and relies on type erasure (cast to Map<Object,Object>) to work around this.
The only drawback is that if you have to ensure that field serializers are generated for any type you add to this map.
RpcMap ensures that the following types are supported Byte, Short, Integer, Long, Float, Double, Date, Boolean, and arrays of these types. As well as List, Set and Map