public static <O, V> V getField(Class<O> clazz, O obj, String fieldName) {
    try {
      Field field = clazz.getDeclaredField(fieldName);
      field.setAccessible(true);
      Object v = field.get(obj);
      return v == null ? null : (V) v;
    } catch (NoSuchFieldException | IllegalAccessException e) {
      throw new RuntimeException(e);
    }
  }
get interfaces of class and its parent
amoro-format-mixed/amoro-mixed-flink/amoro-mixed-flink-common/src/main/java/org/apache/amoro/flink/util/ReflectionUtil.java