【问题标题】:Store class variables into an array?将类变量存储到数组中?
【发布时间】:2011-10-31 13:18:21
【问题描述】:

我在 Java 中有这个类,其中我将大量变量(超过 50 个)声明为:

公共静态最终字符串变量_1 =“值”; ……

我想访问所有这些变量并将它们放在另一个类中的列表中。有没有办法通过使用 for 循环来做到这一点?

【问题讨论】:

  • 将它们存储在数组中对我来说毫无用处。
  • 这里有Daily WTF的味道:P
  • 静态最终字段可以由编译器内联。这意味着您可以使用反射来更改它们,但使用常量的代码不再将它们引用到运行时。

标签: java


【解决方案1】:

您可以在不显式引用每个变量的情况下执行此操作的唯一方法是通过reflection

话虽如此,更好的方法是重构您的代码,这样您就不必这样做了。

【讨论】:

    【解决方案2】:

    您可以使用反射来扫描您的班级成员并将名称与"variable_" 之类的模式匹配。

    【讨论】:

      【解决方案3】:

      如果您有 50 个,并且它们是相关的常量,则它们应该由一个枚举(或多个枚举,具体取决于常量)表示。然后,这将提供自然分组并通过 values() 方法访问列表。

      您当前正在尝试的操作听起来像是代码异味。

      【讨论】:

        【解决方案4】:

        您可以使用反射 API,如下所示:

        for (Field f : MyClass.class.getDeclaredFields()) {
            if (f.getName().startsWith("variable_")) {
                System.out.println("Field " + f.getName() + " with value " + f.get(null));
            }
        }
        

        不过,正如其他人所说,这很丑陋,可能表明一些糟糕的设计决策。

        【讨论】:

        • 不是我的设计...我是这样设计的...我应该扩展它...但不要更改现有代码
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-02
        • 1970-01-01
        • 2013-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多