2014-07-15 22 views
0

我有一些HashMap的:GWT - SerializationException當我發送地圖<對象,對象>

Map<SearchConfig, Object> searchParams; 

有對象可以是簡單的類型,如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; 
    } 
} 

當我發送到服務器時,我有Seri​​alizationException。

如果我將SearchDataEntity與Map分開發送,那麼就可以。

+0

'SearchConfig'類'Serializable'還有嗎? –

+0

是'SearchConfig'沒問題 – L00der

+0

也許你正在存儲一個非'Serializable'對象在你的地圖中。 –

回答

4

你告訴GWT編譯器一個Map將包含一個Object。然後你嘗試傳遞一個String或一個SearchDataEntity而不是一個Object。編譯器沒有料到這一點,也沒有包含在此序列化策略中處理字符串或SearchDataEntity的方法。

想想這樣:如果你爲Map指定了「Animal」而不是「Dog」,編譯器在你傳遞一個Dog對象時將不知道如何處理方法isBarking()

您需要在RPC調用中使用特定的HashMap<SearchConfig, SearchDataEntity>HashMap<SearchConfig, String>

另外,最好的做法是使用HashMap而不是Map來進行RPC調用。再次,編譯器試圖儘可能少地包含代碼。通過指定Map,您可以強制編譯器執行比所需更多的工作(它必須查找每個使用此Map來查看可能需要哪些實現的情況),並且可能會導致比所需的更大的代碼。

+0

感謝它的工作。我不知道這樣的功能 – L00der

相關問題