2015-02-06 29 views
2

以我GWT的客戶端代碼,我有一個類作爲遵循方法synchronizedMap(HashMap中<整數,序列化>)是未定義的類型類別

public class SomeClass { 

    private Map<Integer, Serializable> mId2ContentMap; 
    private Map<Integer, Timestamp> mId2Timestamp; 

    public SomeClass() { 
     mId2ContentMap = Collections.synchronizedMap(new HashMap<Integer, Serializable>()); 
     mId2Timestamp = Collections.synchronizedMap(new HashMap<Integer, Timestamp>()); 
    } 
} 

當我嘗試運行我GWT web應用程序,我有兩個錯誤,說

The method synchronizedMap(HashMap<Integer,Serializable>) is undefined for the type Collections 
The method synchronizedMap(HashMap<Integer,Timestamp>) is undefined for the type Collections 

一派一段時間後,我才發現one post這是我遇到的錯誤遠程相關。該帖子提到GWT不支持反射電話。但我不認爲Collections.synchronizedMap()是一個反射電話。如果我在這裏錯了,請糾正我。

那麼有什麼建議嗎?

+0

你爲什麼試圖在GWT客戶端代碼中使用同步集合? GWT應用程序轉換爲Javascript,JavaScript不支持多線程。否則,GWT具有有限的JDK [兼容性](http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsCompatibility.html) – xRomZak 2015-02-06 20:14:12

+0

@xRomZak感謝您的評論和參考幫助。 – dydigging 2015-02-06 20:53:27

回答

1

synchronizedMap不是GWT JRE中模擬的java.util.Collections中的方法之一,如您所見here

也就是說,如果您只是從客戶端代碼中刪除對synchronizedMap的調用(並且只使用您直接傳入的HashMap),是否可以/方便?我對GWT並不是很瞭解,但考慮到客戶端代碼已被翻譯成JavaScript,無論如何,我都看不出使用Java同步的好處。

+0

你是對的synchronizedMap不是在GWT JRE中模擬的。此外,我發現[「GWT默默接受同步關鍵字,它沒有實際效果。」](http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsCompatibility.html) – dydigging 2015-02-06 21:10:01

+0

我需要承認我有關於Javascript的一點知識。但經過一點研究後,我的印象是[假設Javascript始終是單線程並不完全安全](http://stackoverflow.com/a/2734311/4535217)。你會在這方面給我啓發嗎? – dydigging 2015-02-06 21:17:26

+0

有道理 - 同步結構在單線程執行環境中並不特別有用。那麼是否有什麼讓你放棄synchronizedMap的使用? – wdf 2015-02-06 21:17:47

相關問題