用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java 反射 泛型 demo

2013-04-17 作者: 神马举报

[java]代码库

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.beanutils.PropertyUtilsBean;

public class Conversion {
    /**
     * 通过Java反射的机制动态的获取bean中的值,比较繁琐,后面有一个更简单的方法去做这些工作
     * @param bean
     * @return
     * @throws Exception
     */
    public static <T> Map<String, Object> conversionToMap (T bean)
    throws Exception {
        Map<String, Object> map = new HashMap<String, Object>();
        Class <? extends Object > classType = bean.getClass();
        Field[] fields = classType.getDeclaredFields();
for (Field f : fields) {
            String fieldName = f.getName();
            if (!"serialVersionUID".equals (fieldName) ) {
                String strLetter = fieldName.substring (0, 1).toUpperCase();
                String getName = "get" + strLetter + fieldName.substring (1);
                Method getMethod = classType.getMethod (getName, new Class[] {});
                Object methodReturn = getMethod.invoke (bean, new Object[] {});
                String value = methodReturn == null ? "" : methodReturn
                               .toString();
                map.put (fieldName, value);
            }
        }
        return map;
    }

    /**
     * 这里我们使用了第三方的工具类,可以帮之我们省去很多工作量,例如我们不需要自己通过反射的方法去获取bean中
     * 属性的值,PropertyUtilsBean可以帮我们搞定一切
     * @param bean
     * @return
     * @throws Exception
     */
    public static <T> Map<String, Object> conversionToMapByTool (T bean) throws Exception {
        Map<String, Object> map = new HashMap<String, Object>();
        PropertyUtilsBean propertyUtilsBean = new PropertyUtilsBean();
        PropertyDescriptor[] descriptors = propertyUtilsBean.getPropertyDescriptors (bean);

for (PropertyDescriptor d : descriptors) {
            String fieldName = d.getName();
            Object value = propertyUtilsBean.getNestedProperty (bean, fieldName);
            if (!"class".equals (fieldName) ) {
                map.put (fieldName, value);
            }
        }
        return map;
    }

    public static void main (String[] args) throws Exception {
        TestBean bean = new TestBean();
        bean.setAddress ("Addrss");
        bean.setName ("Name");
        bean.setSex ("Man");

        try {
            Map<String, Object> map1 = Conversion.conversionToMap (bean);
            System.out.println (map1.toString() );
            Map<String, Object> map2 = Conversion.conversionToMapByTool (bean);
            System.out.println (map2.toString() );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}


网友评论    (发表评论)

共2 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...