2012-01-22 9 views
0

私は若干の問題があり、その下このGWTコードを持っている:もっと速い「地図」はありますか?

それはどちらかだloginaboutmeプロパティが設定されているか、単にcontactsは、これまでのラインで最初に来るどの設定されています。 forループが終了する前にcontactsプロパティが設定されている可能性があります。その結果、contactsにはnullが割り当てられますか?

public void copyFrom(User user) { 
     Map<String,String> map = new HashMap<String,String>(); 
     for (Contact contact : user.getContacts()) { 
      map.put(contact.getType(), contact.getValue()); 
     } 
     super.set("lastlogin", user.getLastLogin()); 
     super.set("aboutme", user.getAboutMe()); 
     super.set("contacts", map); 
    } 

「高速」Mapを使用する必要がありますか?

+1

これは普通のJavaの質問であり、GWTとは関係ありません。 – Kai

+0

この場合、「スーパー」とは何ですか?恐らく問題はそこにある。あなたは連絡先のリストをループして、それらをマップに入れ、次にその配置されたマップを使用してプロパティを設定しています。不思議な行動が必要な理由はありません。マップは問題ではありません。 –

+1

実際には、これはGWTがjavascriptにコンパイルされているため、GWTに関する質問です.OPは、JavaScriptにコンパイルするとより速く実行される実装があるかどうかを知りたいと思っています。 –

答えて

3

Mapにforループも値を追加しても、非同期操作ではないため、super.set(...)を呼び出す前にループ全体が実行されます。 mapは、宣言の瞬間にインスタンス化するので、この場合はnullにはなりません。 (たとえば、user.getContacts()に要素がない場合など)、nullではないことがあります。

あなたの問題はset(...)の実装にあります。この場合、superはこの場合です。

1

存在しないキーのマップ上でgetを呼び出している場合は、nullが返されます。コードは順番に実行されるので、mapにアクセスしたときにforループが終了していることを確認できます。

+0

ループが完了したときはどうすればわかりますか?私はいくつかの旗を置く必要があるという意味ですか?実際のコードがjavascriptにコンパイルされているかどうかがわからないため、GWTでタグ付けしました。 – xybrek