我在下面有这个GWT代码有一些小问题:
设置了login
和aboutme
属性,或者只设置了contacts
,它始终位于该行的第一位。这可能是在for循环完成之前设置了contacts
属性,导致contacts
被赋值为空吗?
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
?
答案 0 :(得分:3)
for循环和向Map
添加值都不是异步操作,因此整个循环在调用super.set(...)
之前执行。在这种情况下,map
不能是null
,因为您在声明时将其实例化。它可能最终没有填充(例如,如果user.getContacts()
中没有元素),但不是空。
你的问题在于set(...)
在这种情况下super
的实施。
答案 1 :(得分:1)
如果您在地图上呼叫get
,则返回不存在的密钥null
,这是真的。您的代码是按顺序执行的,因此您可以确保在访问map
时完成for循环。