【发布时间】:2011-02-23 01:52:25
【问题描述】:
场景:创建具有 Room 对象的服务器,其中包含 User 对象。
我想通过 Id(字符串)将房间存储在某种 Map 中。
期望的行为:
当用户通过服务器发出请求时,我应该能够通过 id 从库中查找房间,然后将用户添加到房间,如果这是请求需要的话。
目前我在存储地图的 Library.java 类中使用静态函数来检索房间:
public class Library {
private static Hashtable<String, Rooms> myRooms = new Hashtable<String, Rooms>();
public static addRoom(String s, Room r) {
myRooms.put(s, r);
}
public static Room getRoomById(String s) {
return myRooms.get(s);
}
}
在另一堂课上,我会做相当于myRoom.addUser(user);
我使用 Hashtable 观察到的是,无论我将用户添加到 getRoomById 返回的 Room 多少次,该用户稍后都不在房间内。
我认为在 Java 中,返回的对象本质上是对数据的引用,与 Hashtable 中具有相同引用的相同对象;但是,它的行为并非如此。有没有办法获得这种行为?也许有某种包装?我只是使用了错误的地图变体吗?
帮助?
【问题讨论】:
-
最好也能看到 Room 的代码。
-
它会认为,一旦我发布了这个,我就会把这些点连接起来。在 4 个月不看这段代码后,我又回来了。我有一些隐藏在用户中的代码 sn-p 基本上是这样做的: setRoomPseudo(Room r) { if(myRoom != null) myRoom.removeMe() myRoom = r } 所以,我忘记了它是这样工作的并做了操作乱序。已修复,麻烦您了。毕竟我懂地图,还有java,只是我自己不懂!
标签: java multithreading reference map hashtable