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类){}