因此,我有一个机器人,作为一个角色扮演经理处理战斗,技能点和类似的,我试图让我的代码更通用一点,这样我可以有更少的页面,因为他们都做同样的事情,他们只是有不同的初始化器,但我遇到了一个障碍,我需要检查用户是否在特定的统计强度,感知,敏捷性等最低限度
所以我打电话给
mainSPECIAL = rows[0].Strength;这就是问题所在,无论是力量,感知,智力,运气,我总是检查Rows.that属性,也就是Rows.Luck的幸运福利,我已经在我的初始化程序中设置了
var PERKSPECIALName = "Strength";但我不能打给你
mainSPECIAL = rows.PERKSPECIALName,但是应该有办法做到这一点,对吧?因此,当它看到"rows.PERKSPECIALName“时,它会查找"PERKSPECIALName”,然后获取rows.Strength的值
发布于 2017-06-10 04:13:43
为此,您需要使用反射:
Field f1 = rows[0].getClass().getField(PERKSPECIALName);
Integer attribute = (Integer) f1.get(rows[0]);其中"Integer“是从对象中拉出的元素的类型(强度类型)
字段必须声明为public!我认为有一种方法可以在它们不公开的时候获得它们,但它需要更多的代码。
发布于 2017-06-23 15:41:39
看起来你有一组需要用常量标识符来标识的整数。您可能会发现EnumMap很有用。看看How to use enumMap in java吧。
或者,如果您只想使用一个字符串来标识您想要引用的额外福利,只需使用Map即可。
Java不像其他语言那样具有引用到成员的功能,所以如果您不想更改数据结构,您可以考虑使用lambda函数或更重的语言特性来提高重用性,这对于您正在尝试做的事情来说似乎有点过头了。
https://stackoverflow.com/questions/44465941
复制相似问题