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

Java 将类中的所有静态变量放入数组/列表,java,arrays,arraylist,Java,Arrays,Arraylist,有点古怪的要求 public class DummyClass{ public static final DummyClass var1; public static final DummyClass var2; public static final DummyClass var3; . . . public static final DummyClass var100; } 现在,从这个类之外,我们可以将这个变量集中到一个数组或列表中,这样我

有点古怪的要求

public class DummyClass{
   public static final DummyClass var1;
   public static final DummyClass var2;
   public static final DummyClass var3;
    .
    .
    .
   public static final DummyClass var100;
}
现在,从这个类之外,我们可以将这个变量集中到一个数组或列表中,这样我就可以迭代它们了吗?就像我做了类似的事情

List<DummyClass> dummyList = *some op*; //I want value of some op.
List dummyList=*some op*//我想要一些op的值。

我应该能够访问var1…var100

您可以使用反射:

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

如果您有一个带有常量的类,并且希望获得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());
List constantValues=Arrays.stream(DummyClass.class.getDeclaredFields())
.filter(field->Modifier.isStatic(field.getModifiers()))
.map(字段->{
试一试{
返回(字符串)字段.get(DummyClass.class);
}捕获(非法访问例外e){
抛出新的运行时异常(e);
}
})
.filter(name->!name.equals(“不需要\u常量”)//如果需要,请过滤掉
.collect(Collectors.toList());

我无法更改DummyClass的源代码。我会研究如何使用反射。你能将其设置为枚举吗?@Tom,正如我所说,我没有访问源文件的权限。@Chandra如果你认为正确,请标记一个aswer correctsolution@Cameron我找不到任何isRightName()方法。@NarutoUzumaki:这是伪代码。
isRightName
表示决定字段名是否有趣的用户代码。请注意,此代码段不调用
Modifier.isRightName
;它只是
isRightName
&
真的应该在
isStatic
方法中吗?如果是这样,If语句中仍然缺少两个
。@CameronSkinner我如何才能使它成为所有此类类的genenal util方法,我尝试将DummyClass作为参数传递,该参数是类的一种类型?但不起作用。谢谢。代码类似于:
public void printalprops(c类){}