缘分小风

导航

 


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);
    }
}

posted on 2015-08-27 16:14  缘分小风  阅读(206)  评论(0)    收藏  举报