public static FieldAccessor createAccessor()

in java/fury-core/src/main/java/org/apache/fury/reflect/FieldAccessor.java [126:177]


  public static FieldAccessor createAccessor(Field field) {
    if (RecordUtils.isRecord(field.getDeclaringClass())) {
      Object getter;
      try {
        Method getterMethod = field.getDeclaringClass().getDeclaredMethod(field.getName());
        getter = Functions.makeGetterFunction(getterMethod);
      } catch (NoSuchMethodException ex) {
        throw new RuntimeException(ex);
      }
      if (getter instanceof Predicate) {
        return new BooleanGetter(field, (Predicate) getter);
      } else if (getter instanceof ToByteFunction) {
        return new ByteGetter(field, (ToByteFunction) getter);
      } else if (getter instanceof ToCharFunction) {
        return new CharGetter(field, (ToCharFunction) getter);
      } else if (getter instanceof ToShortFunction) {
        return new ShortGetter(field, (ToShortFunction) getter);
      } else if (getter instanceof ToIntFunction) {
        return new IntGetter(field, (ToIntFunction) getter);
      } else if (getter instanceof ToLongFunction) {
        return new LongGetter(field, (ToLongFunction) getter);
      } else if (getter instanceof ToFloatFunction) {
        return new FloatGetter(field, (ToFloatFunction) getter);
      } else if (getter instanceof ToDoubleFunction) {
        return new DoubleGetter(field, (ToDoubleFunction) getter);
      } else {
        return new ObjectGetter(field, (Function) getter);
      }
    }
    if (GraalvmSupport.isGraalBuildtime()) {
      return new GeneratedAccessor(field);
    }
    if (field.getType() == boolean.class) {
      return new BooleanAccessor(field);
    } else if (field.getType() == byte.class) {
      return new ByteAccessor(field);
    } else if (field.getType() == char.class) {
      return new CharAccessor(field);
    } else if (field.getType() == short.class) {
      return new ShortAccessor(field);
    } else if (field.getType() == int.class) {
      return new IntAccessor(field);
    } else if (field.getType() == long.class) {
      return new LongAccessor(field);
    } else if (field.getType() == float.class) {
      return new FloatAccessor(field);
    } else if (field.getType() == double.class) {
      return new DoubleAccessor(field);
    } else {
      return new ObjectAccessor(field);
    }
  }