【问题标题】:getting all static variables in a class into array/list将类中的所有静态变量放入数组/列表中
【发布时间】:2011-05-26 21:19:57
【问题描述】:

有点奇怪的要求。

public class DummyClass{
   public static final DummyClass var1;
   public static final DummyClass var2;
   public static final DummyClass var3;
    .
    .
    .
   public static final DummyClass var100;
}

现在我们可以从这个类之外将这个 var 汇集到一个数组或列表中,以便我可以迭代它们吗?就像我做类似的事情

List<DummyClass> dummyList = *some op*; //I want value of some op.

我应该可以访问 var1...var100

【问题讨论】:

  • 我无法更改 DummyClass 的来源。
  • 我会考虑使用反射。
  • 你能把它变成一个枚举吗?
  • @Tom 正如我所说,我无权访问源文件。

标签: java arrays arraylist


【解决方案1】:

你可以使用反射:

Field[] fields = DummyClass.class.getDeclaredFields();
for (Field f : fields) {
    if (Modifier.isStatic(f.getModifiers()) && isRightName(f.getName())) {
        doWhatever(f);
    } 
}

【讨论】:

  • @Chandra 如果您认为正确的解决方案,请标记一个正确的答案
  • @Cameron 我在 Modifier 类中找不到任何 isRghtName() 方法。
  • @NarutoUzumaki:这是伪代码。 isRightName 表示决定字段名称是否有趣的用户代码。注意这个sn-p不会调用Modifier.isRightName;只是isRightName
  • &amp;&amp; 真的应该在isStatic 方法中吗?如果是这样,if 语句中仍然缺少两个 )
  • @CameronSkinner 我如何将它变成所有此类类的通用 util 方法,我尝试将 DummyClass 作为参数传递,该参数是一种类?但没有奏效。谢谢。代码类似于:public void printAllProps(Class c) { }
【解决方案2】:

如果您有一个带有常量的类并且想要获取您的 java 常量的实际值,您可以执行以下操作:

   List<String> constantValues = Arrays.stream(DummyClass.class.getDeclaredFields())
      .filter(field -> Modifier.isStatic(field.getModifiers()))
      .map(field -> {
        try {
          return (String) field.get(DummyClass.class);
        } catch (IllegalAccessException e) {
          throw new RuntimeException(e);
        }
      })
      .filter(name -> ! name.equals("NOT_NEEDED_CONSTANT") // filter out if needed 
      .collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多