- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑玩家类...当玩家加入游戏(创建对象)时,它会检查是否已加入同名玩家...
public class Player {
private static List<Player> players = new ArrayList<>();
private String name;
public Player(String name) {
this.name = name;
for (Player otherPlayer : players) { // Iterating static field
if (otherPlayer.name.equalsIgnoreCase(name)) {
otherPlayer.quit("Somebody with the same name joined the game");
}
}
}
public void quit(String message) {
players.remove(this); // Modifying static field
Server.disconnect(this, message);
}
}
我知道 Iterator 可以处理这个问题,但我们并不总是知道外部方法中的公共(public)静态字段会发生什么情况以及何时使用 foreach 以及何时改用 Iterator ...
这个问题有什么好的做法吗?
最佳答案
第一个也是更重要的良好做法称为关注点分离。如:Player 类应该模拟单个玩家。
您在一个地方混合作为玩家的职责和管理整个玩家对象集。不要那样做!
这两件事根本不属于一起。从这个意义上讲:应该有一个 PlayerManager
类,例如它知道所有玩家。并且也忘记像这样使用 static
字段。因为这会在你的类的不同方面之间产生超紧密的耦合。例如,当您需要多个 玩家列表时会发生什么情况?如果您有太多玩家想要根据某些属性将他们组织到桶中怎么办?
除此之外,直接的答案是:与其立即从列表中删除对象,不如将它们收集到第二个playersToBeDeleted
列表中。并且迭代第一个列表后,只需使用 players.removeAll(playersToBeDeleted)
为例。
并谈论良好实践:仔细考虑您是否真的想使用 Lists - 或者 Set 是否不是更好的选择。列表总是暗示顺序,糟糕的是,它们允许重复添加相同 对象。而集合免费为您提供“独特的元素”语义!
关于java - 避免静态集合的 ConcurrentModification 的良好做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48765982/
如果您想分享更多信息,可以在这里找到整个资源 指针: https://github.com/sergiotapia/DreamInCode.Net 基本上,我的API将为其他开发人员提供
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。 我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseS
所以我想知道一些我应该避免在 javascript 中做的事情以获得良好的 SEO 排名。在我的下一个站点中,我将广泛使用 jquery 和 javascript,但不想牺牲 SEO。那么您认为我应该
基本上,我想知道什么是避免 future CSS 代码出现问题和混淆的最佳方法... 像这样命名 CSS 属性: div#content ul#navigation div.float-left (真
我是一名优秀的程序员,十分优秀!