将类中的所有静态变量放入数组/列表中

2022-09-03 03:52:09

有点奇怪的要求。

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


答案 1

您可以使用反射:

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

答案 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());