0

我有一个 HashMap,我将 HttpSession 对象作为键和 HashSet 作为值

HashMap<HttpSession, HashSet<String>> map = new HashMap<HttpSession, HashSet<String>>();

我有一个 HttpSession 侦听器,我需要在其中检查 Map 中是否存在天气会话对象

public void sessionDestroyed(HttpSessionEvent se) {
    HashMap<HttpSession, HashSet<String>> map = //Get map object
    HttpSession session = se.getSession();
    if(map.containsKey(session)){
        //TODO Code goes here
    }
}

IF 条件始终返回 false,即使映射中存在会话对象(手动检查映射条目)。我卡住了!!!

4

1 回答 1

2

如果在先前的请求中将该值放入映射中,则HttpSession您现在拥有的对象不一定与映射中存在的对象相同(即使它们代表相同的会话)。同一会话的两个表示不需要(AFAIK)是equals或具有相同的hashCode,这将破坏地图。

您可以尝试使用该session.getId()值作为键。

于 2013-03-12T06:48:39.800 回答