仅检索 Java 类中声明的静态字段
2022-08-31 06:39:16
我有以下类:
public class Test {
public static int a = 0;
public int b = 1;
}
是否可以使用反射仅获取静态字段的列表?我知道我可以用.但似乎没有办法确定实例是否表示静态字段。Test.class.getDeclaredFields()
Field
我有以下类:
public class Test {
public static int a = 0;
public int b = 1;
}
是否可以使用反射仅获取静态字段的列表?我知道我可以用.但似乎没有办法确定实例是否表示静态字段。Test.class.getDeclaredFields()
Field
你可以这样做:
Field[] declaredFields = Test.class.getDeclaredFields();
List<Field> staticFields = new ArrayList<Field>();
for (Field field : declaredFields) {
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
staticFields.add(field);
}
}
我偶然发现了这个问题,并觉得它需要使用流的Java 8更新:
public static List<Field> getStatics(Class<?> clazz) {
List<Field> result;
result = Arrays.stream(clazz.getDeclaredFields())
// filter out the non-static fields
.filter(f -> Modifier.isStatic(f.getModifiers()))
// collect to list
.collect(toList());
return result;
}
显然,该示例对于可读性有点尴尬。实际上,您可能会这样写:
public static List<Field> getStatics(Class<?> clazz) {
return Arrays.stream(clazz.getDeclaredFields()).filter(f ->
Modifier.isStatic(f.getModifiers())).collect(toList());
}