And*_*ers 152 java reflection static field
我有以下课程:
public class Test {
public static int a = 0;
public int b = 1;
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用反射来获取静态字段列表?我知道我可以获得所有字段的数组Test.class.getDeclaredFields().但似乎没有办法确定Field实例是否代表静态字段.
Abh*_*kar 304
你可以这样做:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我偶然偶然发现了这个问题,觉得需要使用流来进行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;
}
Run Code Online (Sandbox Code Playgroud)
显然,该样本有点可读性.实际上,您可能会这样写:
public static List<Field> getStatics(Class<?> clazz) {
return Arrays.stream(clazz.getDeclaredFields()).filter(f ->
Modifier.isStatic(f.getModifiers())).collect(toList());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73765 次 |
| 最近记录: |