【问题标题】:Dynamic Named SQL Fields动态命名 SQL 字段
【发布时间】:2017-06-09 20:07:00
【问题描述】:

所以我有一个机器人,可以作为角色扮演法师处理战斗、技能点等,我试图让我的代码更通用一些,这样我可以有更少的页面,因为它们都做同样的事情他们只是有不同的启动器,但我遇到了一个障碍,我需要检查用户在特定统计数据强度、感知、敏捷性等方面是否有最小值

所以我打电话

mainSPECIAL = rows[0].Strength;

这就是问题所在,它经受住了它的力量、感知、智力、运气,无论我总是要检查 Rows[0].that 属性,即 Rows[0].Luck forluck perks,我已经在前面设置了我的初始化器

var PERKSPECIALName = "Strength";

但我不能打电话

mainSPECIAL = rows[0].PERKSPECIALName 但应该有办法做到这一点吗?这样当它看到“rows[0].PERKSPECIALName”时,它会查找“PERKSPECIALName”,然后获取 rows[0].Strength 的值

【问题讨论】:

    标签: java mysql node.js


    【解决方案1】:

    为此,您需要使用反射:

    Field f1 = rows[0].getClass().getField(PERKSPECIALName);
    
    Integer attribute = (Integer) f1.get(rows[0]);
    

    其中“整数”是您从对象中拉出的元素的类型(强度的类型)

    该字段必须声明为公共!我认为有一种方法可以在它们不公开但需要更多代码时获取它们。

    【讨论】:

    • 似乎不起作用,我刚刚得到并在 Filed f1 "F1 is not a valid identifier" Field f1 = rows[0].getClass().getField(PERKSPECIALName); mainSPECIAL = rows[0].f1; 上出错
    • f1 是一个 Field 实例,仅此而已。您必须将其解析为您的类型。我会将其添加到解决方案中。
    【解决方案2】:

    似乎您有一组整数,需要用常量标识符来标识。您可能会发现 EnumMap 很有用。看看How to use enumMap in java

    或者,如果您只想使用字符串来标识要引用的特权,则只需使用地图。

    Java 不像其他一些语言那样具有对成员的引用,因此,如果您不想更改数据结构,则可以考虑使用 lambda 函数或更重的语言功能来增加重用,这似乎就像你想要做的事情矫枉过正。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多