在开发中经常会遇到交互时很多字段的情况,为了方便很多时候就采取将对于的字段直接转换成对象的形式,通常会采用map与Object互转t的方法。 小编在开发过程中遇到如下几种转换方法:

/**
* 使用org.apache.commons.beanutils进行转换
*/
class A {

public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {    
    if (map == null)  
        return null;  

    Object obj = beanClass.newInstance();  

    org.apache.commons.beanutils.BeanUtils.populate(obj, map);  

    return obj;  
}    

public static Map<?, ?> objectToMap(Object obj) {  
    if(obj == null)  
        return null;   

    return new org.apache.commons.beanutils.BeanMap(obj);  
}    

}

/**
* 使用Introspector进行转换
*/
class B {

public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {    
    if (map == null)   
        return null;    

    Object obj = beanClass.newInstance();  

    BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());    
    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();    
    for (PropertyDescriptor property : propertyDescriptors) {  
        Method setter = property.getWriteMethod();    
        if (setter != null) {  
            setter.invoke(obj, map.get(property.getName()));   
        }  
    }  

    return obj;  
}    

public static Map<String, Object> objectToMap(Object obj) throws Exception {    
    if(obj == null)  
        return null;      

    Map<String, Object> map = new HashMap<String, Object>();   

    BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());    
    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();    
    for (PropertyDescriptor property : propertyDescriptors) {    
        String key = property.getName();    
        if (key.compareToIgnoreCase("class") == 0) {   
            continue;  
        }  
        Method getter = property.getReadMethod();  
        Object value = getter!=null ? getter.invoke(obj) : null;  
        map.put(key, value);  
    }    

    return map;  
}    

}

/**
* 使用reflect进行转换
*/
class C {

public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {    
    if (map == null)  
        return null;    

    Object obj = beanClass.newInstance();  

    Field[] fields = obj.getClass().getDeclaredFields();   
    for (Field field : fields) {    
        int mod = field.getModifiers();    
        if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){    
            continue;    
        }    

        field.setAccessible(true);    
        field.set(obj, map.get(field.getName()));   
    }   

    return obj;    
}    

public static Map<String, Object> objectToMap(Object obj) throws Exception {    
    if(obj == null){    
        return null;    
    }   

    Map<String, Object> map = new HashMap<String, Object>();    

    Field[] declaredFields = obj.getClass().getDeclaredFields();    
    for (Field field : declaredFields) {    
        field.setAccessible(true);  
        map.put(field.getName(), field.get(obj));  
    }    

    return map;  
}   

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值