我确信必须有一个标准的方法来做到这一点,但我搜索 Stackoverflow 的尝试失败了。
我有这样的方法:
public void processSomeWidgetsForUser(int userItemId) {
Iterator<Widgets> iter = allWidgets.values().iterator();
while(iter.hasNext()) {
Widget thisWidget = iter.next();
if (userItemId == -1 || thisWidget.getUsersItemId() == userItemId) {
widget.process();
}
}
}
如您所见,-1 是一个“特殊值”,表示所有进程。这样做可以避免在另一个名为 processSomeWidgetsForAllUsers 的方法中重复循环代码。
但我不喜欢这样的特殊值,因为它们很容易被误用或误解,这正是我现在必须解决的情况(有人认为 -1 意味着其他东西)。
我只能想到两种方法来改善这一点。
- 有一个常量,包含 -1 称为 Widget.ALLWIDGETS 之类的东西,它至少是自记录的,但不会阻止代码使用 -1(例如,如果有人集成旧代码)
- 更改方法以获取要处理的所有用户 ID 的列表,该列表可以为空,但这在性能方面似乎不是很好(需要先检索所有用户 ID,然后循环删除。如果数字列表中的小部件在检索 id 和删除之间发生变化
有没有更好的办法?我确定我遗漏了一些明显的东西。
上面的代码略有改动,所以可能无法编译,但你应该明白要点。