package com.wisedu.scc.love.utils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 通过Java反射机制获取JavaBean对象
*/
public class ReflectBeanUtil {
// 不属于JavaBean自身的属性
private static final String NOFIELDNAME = "serialVersionUID";
/**
* 根据字符串获取JavaBean
* @param beanName, 例如:com.package.MyClass
*/
public static Object getInstanceByBeanName(String beanName) {
try {
return Class.forName(beanName).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 根据字符串获取JavaBean
* @param beanName, 例如:com.package.MyClass
*/
public static Class<?> getClazzByBeanName(String beanName) {
try {
return Class.forName(beanName);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 根据JavaBean获取属性名称和类型
* @param beanName 例如:com.package.MyClass
* @return
*/
public static Map<String, Field> getFields(String beanName) {
try {
Object obj = getInstanceByBeanName(beanName);
Map<String, Field> results = new HashMap<>();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
String key = field.getName();
if (!NOFIELDNAME.equals(key)) {
results.put(key, field);
}
}
return results;
} catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 根据属性名称和JavaBean获取属性值
* @param fieldName
* @param obj
* @return
*/
public static Object getFieldValueByName(Object obj, String fieldName) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = obj.getClass().getMethod(getter, new Class[]{});
Object value = method.invoke(obj, new Object[]{});
return value;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 判断属性值是否是规定的类型
*/
public static boolean isBaseType(Object value) {
return value instanceof String || value instanceof Integer
|| value instanceof Date || value instanceof Boolean
|| value instanceof Double || value instanceof Float
|| value instanceof Byte || value instanceof Short
|| value instanceof Long;
}
}