code: public static Field[] getAllFields(Class<?> clazz) {
          Assert.notNull(clazz, "clazz不能为空");
          return ALL_FIELD_CACHE.compute(clazz, (k, v) -> {
              if (v == null) {
                  List<Field> fields = new ArrayList<>(Arrays.asList(clazz.getDeclaredFields()));
  
                  //查找是否存在父类，如果存在且不是Object那么查找父类的field
                  Class<?> superClass = clazz.getSuperclass();
  
                  // 遍历设置访问权限，同时加入单个field的缓存
                  fields.stream().map(ReflectUtil::allowAccess).forEach(
                      f -> FIELD_CACHE.compute(new FieldKey(f.getName(), clazz), (fk, fv) -> {
                          if (fv == null) {
                              return f;
                          } else {
                              return fv;
                          }
                      }));
  
                  if (superClass != null && superClass != Object.class) {
                      fields.addAll(Arrays.asList(getAllFields(superClass)));
                  }
                  return fields.toArray(new Field[0]);
              } else {
                  return v;
              }
          });
      }
docs: 获取指定Class的所有field（包含父类声明的字段）
  @param clazz Class
  @return 所有field数组