【发布时间】:2015-08-10 14:37:11
【问题描述】:
目前我正在为我的游戏编写一个聊天频道。玩家可以创建聊天频道,其他人也可以加入。这是我到目前为止所拥有的,但我不知道如何归还玩家的收藏。 MultiHashMap 已弃用,它告诉我在 commons.apache 文档上使用 MultiValueMap。
private static MultiMap<Channel, Client> channels;
现在在我的构造函数中创建通道
public Channel(Client owner) {
this.owner = owner;
channels = new MultiValueMap<>();
}
我想要做的是返回玩家的集合。这不起作用...
public static boolean create(Client player) {
Channel channel = new Channel(player);
channels.get(channel).get(player).bla();
return true;
}
感谢您的帮助。我尝试使用 MultiKeyMap 但问题是我无法创建通道,除非它们将 2 个参数作为键,1 个参数作为我不需要的值。如果有更好的选择,请告诉我。
【问题讨论】:
-
尝试将您的
.get(channel).get(player).bla()行拆分为单独的行,以帮助您了解您实际上是在做什么。另外值得注意的是,您是从实例上下文(即从构造函数)分配静态字段。这几乎总是一个错误。 -
@MarkPeters 感谢您的评论。 #get(player) 不接受播放器对象,它需要一个数值,但问题是我需要检查索引,这会让我的生活更加艰难。
-
你为什么在从
Channel检索到的Client上调用bla()而不是传入参数?如果您试图让玩家进入正确的频道,为什么不通过channels.get(channel).contains(player)测试每个参数?您还可以考虑使用不同的数据结构,它不需要使用虚拟通道进行查找,并且可能使用虚拟Client进行查找。 -
@PaulBilnoski
bla()只是 Client 类中的一个测试方法。我想检索播放器并执行该方法。channels.get(channel).get(player)是不可能的,有没有其他地图可以返回我的玩家收藏?例如channels.get(channel).getPlayer().bla()之类的东西也会让我的生活更轻松。
标签: java apache-commons-collection