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 数组所含元素,都是 需要序列化 的元素。

results matching ""

    No results matching ""