我有一些HashMap:
Map<SearchConfig, Object> searchParams;
Object可以是简单类型,例如String,或者他可以是简单的实体:
public class SearchDataEntity implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public SearchDataEntity() {}
private String startDate;
private String endDate;
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
}
当我将其发送到服务器时,我有SerializationException。
如果我将SearchDataEntity与Map分开发送,那就OK了。
答案 0 :(得分:4)
告诉GWT编译器Map将包含一个Object。然后尝试传递String或SearchDataEntity而不是Object。编译器没有预料到这一点,并且它没有包含在此序列化策略中处理String或SearchDataEntity的方法。
可以这样想:如果为Map指定“Animal”而不是“Dog”,编译器在传递Dog对象时将不知道如何处理方法isBarking()
。
您需要在RPC调用中使用特定的HashMap<SearchConfig, SearchDataEntity>
或HashMap<SearchConfig, String>
。
另外,最佳做法是使用HashMap
代替Map
进行RPC调用。同样,编译器尝试包含尽可能少的代码。通过指定Map
,您强制编译器执行超出必要的工作(它必须查找使用此Map查看可能需要哪些实现的每种情况),并且可能导致代码大于必要的代码。