ReflectUtil:
/***************************
*<pre>
* @Package : com.sea.xx.test
* @File Name : ReflectUtil
* @Author : Sea
* @Date : 9/28/22 11:23 AM
* @Purpose :
* @History :
*</pre>
***************************/
import com.google.common.collect.Maps;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
public class ReflectUtil {
/**
* custom commmon field type
*/
public static String[] commonFieldType = {
"int", "long", "short", "double", "float", "char", "byte", "boolean",
"class java.lang.String", "class java.lang.Integer", "class java.lang.Long",
"class java.lang.Short", "class java.lang.Double", "class java.lang.Float",
"class java.lang.Byte", "class java.lang.Boolean", "class java.math.BigDecimal"
};
/**
* 获取类的私有属性 : eg:name
* @param objClss
* @param fileName
* @throws Exception
*/
public static Object getFiledValue(Object objClss, String fileName) throws Exception {
Field name = objClss.getClass().getDeclaredField(fileName);
name.setAccessible(true);
Object o = name.get(objClss);
return o;
}
/**
* @param obj
* @param methodName
* @param args
* @param parameterTypes
* @return
* @throws Exception
*/
public static Object runMethod(Object obj, String methodName, Object args,Class<?>... parameterTypes) throws Exception {
Method declaredMethod = obj.getClass().getDeclaredMethod(methodName, parameterTypes);
declaredMethod.setAccessible(true);
Object invoke = declaredMethod.invoke(obj, args);
return invoke;
}
/**
* 获取类的所有字段以及值
* @param t
* @param <T>
* @return
*/
public static <T> Map<String, Object> getKeyAndValue(T t) {
Map<String, Object> map = Maps.newHashMap();
Class clazz = (Class) t.getClass();
Field[] fields = clazz.getDeclaredFields();
map = Arrays.stream(fields).collect(Collectors.toMap(Field::getName, field -> {
Object resultObj = null;
field.setAccessible(true);
try {
resultObj = field.get(t);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return Optional.ofNullable(resultObj).orElse(0);
}, (k1, k2) -> k2));
return map;
}
/**
* 获取最简类名(去除包名)<br>
* eg : com.csdn.util.ReflectUtil > ReflectUtil
* @param className
* @return simpleClassName
*/
public static String getSimpleClassName(String className) {
return className.substring(className.lastIndexOf(".") + 1);
}
/**
* @param obj
* @param fileName
* @param value
* @throws Exception
*/
public static void setFiledValue(Object obj, String fileName, Object value) throws Exception {
Field name = obj.getClass().getDeclaredField(fileName);
name.setAccessible(true);
name.set(obj,value);
}
/**
* 判断指定对象中的指定属性名的类型是否属于自定义普通数据类型
* @param obj 指定对象
* @param fieldName 指定属性名
* @return
*/
public static boolean isCommonTypeField(Object obj, String fieldName) {
boolean result = false;
try {
Field field = obj.getClass().getDeclaredField(fieldName);
String type = field.getGenericType().toString();
for ( int i = 0; i < commonFieldType.length; i++ ) {
if ( commonFieldType[i].equals(type) ) {
result = true;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 获取指定类的所有属性名
* @param className 指定类全名
* @return 所有属性名
*/
public static String[] getAllFieldName(String className) {
String[] fieldName = null;
try {
Field[] fields = Class.forName(className).getDeclaredFields();
fieldName = new String[fields.length];
for ( int i = 0; i < fields.length; i++ ) {
fieldName[i] = fields[i].getName();
}
} catch (Exception e) {
e.printStackTrace();
}
return fieldName;
}
}