All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xiongyingqi.common.utils.reflect.ReflectionUtils Maven / Gradle / Ivy

The newest version!
package com.xiongyingqi.common.utils.reflect;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.*;

/**
 * @author xiongyingqi
 * @since 16-11-30 下午7:38
 */
public abstract class ReflectionUtils {
  private static final Logger logger = LoggerFactory.getLogger(ReflectionUtils.class);

  public static  void setFieldValueToInstance(String name, String value, T instance, Field[] inFields) throws IllegalAccessException {
    Field field = null;

    for (Field inField : inFields) {
      if (inField.getName().equals(name)) {
        field = inField;
      }
    }

    if (field == null) {
      return;
    }
    field.setAccessible(true);
    field.set(instance, value);
  }

  public static Map convertObjectFieldsToMap(Object o) {
    if (o == null) {
      return null;
    }

    return convertObjectFieldsToMap(o, o.getClass());
  }

  public static Map convertObjectFieldsToMap(Object o, Class clazz) {
    return convertObjectFieldsToMap(o, clazz, true);
  }

  public static Map convertObjectFieldsToMap(Object o, Class clazz, boolean recursion) {
    if (o == null) {
      return null;
    }
    Map map = new HashMap();

    Field[] fields = findFields(clazz, recursion);

    for (Field field : fields) {
      if (Modifier.isStatic(field.getModifiers())) {
        continue;
      }
      field.setAccessible(true);
      try {
        Object fieldValue = field.get(o);
        String name = field.getName();
        String fieldValueString = null;
        if (fieldValue != null) {
          fieldValueString = fieldValue.toString();
        }

        map.put(name, fieldValueString);
      } catch (IllegalAccessException e) {
        logger.error("", e);
      }
    }

    if (logger.isDebugEnabled()) {
      logger.debug("Convert object: {} to map: {}", o, map);
    }

    return map;
  }

  public static List findFieldNames(Class clazz, boolean recursion) {
    Field[] fields = findFields(clazz, recursion);
    List fieldNames = new ArrayList();
    for (Field field : fields) {
      fieldNames.add(field.getName());
    }
    return fieldNames;
  }

  public static Field[] findFields(Class clazz, boolean recursion) {
    List fields = new ArrayList();

    Field[] clazzDeclaredFields = clazz.getDeclaredFields();

    for (Field field : clazzDeclaredFields) {
      if (Modifier.isStatic(field.getModifiers())) {
        continue;
      }
      fields.add(field);
    }

    if (recursion) {
      for (Class superclass = clazz.getSuperclass(); superclass != Object.class; superclass = superclass.getSuperclass()) {
        Field[] superFields = findFields(superclass, false);
        fields.addAll(Arrays.asList(superFields));
      }
    }
    return fields.toArray(new Field[fields.size()]);
  }

  public static Method findGetMethod(Field field) throws NoSuchMethodException {
    if (field == null) {
      return null;
    }
    Class declaringClass = field.getDeclaringClass();

    String name = field.getName();
    String suffix = name.substring(0, 1).toUpperCase();
    if (name.length() > 1) {
      suffix += name.substring(1);
    }
    String methodName = "get" + suffix;
    try {
      return declaringClass.getDeclaredMethod(methodName);
    } catch (NoSuchMethodException e) {
      if (field.getType() == Boolean.TYPE) {
        if (name.startsWith("is")) {
          return declaringClass.getDeclaredMethod(name);
        }
        methodName = "is" + suffix;
        return declaringClass.getDeclaredMethod(methodName);
      }
      throw e;
    }
  }

  public static Object getFieldValue(Field field, Object instance) throws IllegalAccessException {
    field.setAccessible(true);
    return field.get(instance);
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy