package com.renmaiweb.java.sdk;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public final class InstanceProperty {
public static void setObjectValue(Object object, String attr, String value) throws Exception {
if (object != null) {
// 拿到该类
Class<?> clz = object.getClass();
// 获取实体类的所有属性,返回Field数组
Field[] fields = null;
fields = clz.getDeclaredFields();
for (Field field : fields) {
if (field.getName().equalsIgnoreCase(attr)) {
//System.out.println(attr);
field = clz.getDeclaredField(field.getName());
field.setAccessible(true);
field.set(object, value);
return;
}
}
if(clz.getGenericSuperclass() != null) {
Class<?> sclz = clz.getSuperclass();
fields = sclz.getDeclaredFields();
for (Field field : fields) {
if (field.getName().equalsIgnoreCase(attr)) {
//System.out.println(attr);
field = sclz.getDeclaredField(field.getName());
field.setAccessible(true);
field.set(object, value);
return;
}
}
}
}//if (object!=null )
}
/**
* 注:如果类型是boolean 那就是isXXX, 反射找不到getter的具体名
*/
public static <T> T getObjectValue(Class<T> clazz, Object object, String attr) throws Exception {
if (object != null) {
Class<?> clz = object.getClass();
Field[] fields = clz.getDeclaredFields();
for (Field field : fields) {
if (field.getName().equalsIgnoreCase(attr)) {
Method m = (Method) object.getClass().getMethod("get" + getMethodName(field.getName()));
@SuppressWarnings("unchecked")
T val = (T) m.invoke(object);// 调用getter方法获取属性值
return val;
}
}
}//if (object!=null )
return null;
}
/**
* 1. 属性暂不支持boolean类型的
* 2. 只支持属性值为java基本数据类型
* 3. 要获取的属性值要具有get系列方法, 如果object存在的属性未包含对应的get方法,会抛出未发现方法异常,如果确信不需要此属性,可以忽略异常
* 提示
*/
public static Map<String, String> getObjectValue(Object object) {
if (object != null) {
Map<String, String> map = new HashMap<String, String>();
Class<?> clz = object.getClass();
Field[] fields = clz.getDeclaredFields();
for (Field field : fields) {
Method m;
try {
m = (Method) object.getClass().getMethod("get" + getMethodName(field.getName()));
map.put(field.getName().toUpperCase(), (String) m.invoke(object));
} catch (Exception e) {
System.out.println("InstanceProperty.getObjectValue throws " + e.toString());
continue;
}
}
return map;
}//if (object!=null )
return null;
}
public static Map<String, String> ObjectToMap(Object object) throws Exception {
return getObjectValue(object);
}
public static <T> T MapToObject(Class<T> clazz, Map<String, Object> map) throws Exception {
T t = clazz.newInstance();
for(Map.Entry<String, Object> entry: map.entrySet()) {
setObjectValue(t, entry.getKey().toString(), entry.getValue().toString());
}
return t;
}
// 把一个字符串的第一个字母大写、效率是最高的、
private static String getMethodName(String fildeName) throws Exception{
byte[] items = fildeName.getBytes();
items[0] = (byte) ((char) items[0] - 'a' + 'A');
return new String(items);
}
}
浙公网安备 33010602011771号