2.5.3 对实例变量进行自省
通过 Modifier 类可以检查字段的限定符,如下代码可以判断 field 是否是 static 字段:
// 若 field 为 static 字段,返回 true
Modifier.isStatic( field.getModifiers() );
因此,修改 2.2 节中的代码,跳过 static 字段:
// 获取对象 o 的所有实例变量
public static Field[] getInstanceVariables(Object o) {
Class<?> cls = o.getClass();
List<Field> acc = new LinkedList<>();
while (cls != null) {
Field[] fields = cls.getDeclaredFields();
for (Field f : fields) {
// 跳过 static 字段
if (! Modifier.isStatic(f.getModifiers())) {
acc.add(f);
}
}
cls = cls.getSuperclass();
}
return acc.toArray(new Field[acc.size()]);
}
与 2.2 节相比,通过 Modifier.isStatic() 方法,跳过了 static 字段,此时返回的 Field 数组所含元素,都是 需要序列化 的元素。