【发布时间】:2015-05-30 20:23:05
【问题描述】:
这个问题可能是菜鸟级的,但我没有解决方案,所有 googleling 导致我更新哈希值,我已经知道了。
我正在制作一个角色扮演游戏,这个问题会影响所有有统计数据的东西(比如有addedStr, addedIQ, addedAgi 的装备类等等)。
为了简化更新过程,我在hashmap 中添加了所有这些变量,并通过以下方式更新hashmap:
HashMap<String,Integer> statsHash = new HashMap<>();
void setStatsHash() {
statsHash.put("addedCon", addedCon);
statsHash.put("addedStr", addedStr);
statsHash.put("addedAgi", addedAgi);
...
}
void changeStatsHash(String inStat, int inChange) {
statsHash.put("addedCon", statsHash.get("addedCon") + 1);
(this is an example, do not point out that inStat and inChange is dummy variables)
}
这很好用,我可以更新 `hashmapv.问题如下:
myEquipment.changeStatsHash("addedCon", 1);
myEquipment.printStatsHash();
System.out.println(myEquipment.addedCon);
当我这样做时,printStatsHash 表示 addedCon = whatever 它在 +1 之前。
但是myEquipment.addedCon没有变。
所以我的问题是这个,只有这个:
每次hashmap 中的变量发生变化时,如何从hashmap 更新“母亲”变量?
我希望hashmap 是原始对象的pointer,并且它们会一起更改,但似乎并非如此。
谢谢!
【问题讨论】:
-
你能显示更多代码吗? “母变量”声明在哪里?
-
这听起来有点像您使用反射 API 的东西。尽管从您的示例来看,我并不真正相信将变量存储在地图中的整个想法的有用性。这个更新过程是什么?地图如何简化它?
-
正如我所说,如果您真的需要这个,请查看this。它正是为此目的而设计的。
-
myEquipment 是从 hashmap 派生的类的实例?如果你将它的代码添加到帖子中,它会使问题更清楚
-
“每次哈希图中的变量发生变化时,如何从哈希图中更新“母亲”变量? ...对于几乎所有编程问题(出于各种原因),反射应该始终是最后的解决方案。此类问题的首选方法是使用观察者模式。可观察对象将“通知”许多对象中的任何一个关于其状态的更改。此外,JavaFX 包括一个绑定 API,它可以单向或双向绑定属性值。观察者模式将提供比反射更强大的解决方案。