[Java] java 反射 泛型 demo →→→→→进入此内容的聊天室

来自 , 2020-11-01, 写在 Java, 查看 149 次.
URL http://www.code666.cn/view/06997f04
  1. import java.beans.PropertyDescriptor;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.Method;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6.  
  7. import org.apache.commons.beanutils.PropertyUtilsBean;
  8.  
  9. public class Conversion {
  10.     /**
  11.      * 通过Java反射的机制动态的获取bean中的值,比较繁琐,后面有一个更简单的方法去做这些工作
  12.      * @param bean
  13.      * @return
  14.      * @throws Exception
  15.      */
  16.     public static <T> Map<String, Object> conversionToMap (T bean)
  17.     throws Exception {
  18.         Map<String, Object> map = new HashMap<String, Object>();
  19.         Class <? extends Object > classType = bean.getClass();
  20.         Field[] fields = classType.getDeclaredFields();
  21. for (Field f : fields) {
  22.             String fieldName = f.getName();
  23.             if (!"serialVersionUID".equals (fieldName) ) {
  24.                 String strLetter = fieldName.substring (0, 1).toUpperCase();
  25.                 String getName = "get" + strLetter + fieldName.substring (1);
  26.                 Method getMethod = classType.getMethod (getName, new Class[] {});
  27.                 Object methodReturn = getMethod.invoke (bean, new Object[] {});
  28.                 String value = methodReturn == null ? "" : methodReturn
  29.                                .toString();
  30.                 map.put (fieldName, value);
  31.             }
  32.         }
  33.         return map;
  34.     }
  35.  
  36.     /**
  37.      * 这里我们使用了第三方的工具类,可以帮之我们省去很多工作量,例如我们不需要自己通过反射的方法去获取bean中
  38.      * 属性的值,PropertyUtilsBean可以帮我们搞定一切
  39.      * @param bean
  40.      * @return
  41.      * @throws Exception
  42.      */
  43.     public static <T> Map<String, Object> conversionToMapByTool (T bean) throws Exception {
  44.         Map<String, Object> map = new HashMap<String, Object>();
  45.         PropertyUtilsBean propertyUtilsBean = new PropertyUtilsBean();
  46.         PropertyDescriptor[] descriptors = propertyUtilsBean.getPropertyDescriptors (bean);
  47.  
  48. for (PropertyDescriptor d : descriptors) {
  49.             String fieldName = d.getName();
  50.             Object value = propertyUtilsBean.getNestedProperty (bean, fieldName);
  51.             if (!"class".equals (fieldName) ) {
  52.                 map.put (fieldName, value);
  53.             }
  54.         }
  55.         return map;
  56.     }
  57.  
  58.     public static void main (String[] args) throws Exception {
  59.         TestBean bean = new TestBean();
  60.         bean.setAddress ("Addrss");
  61.         bean.setName ("Name");
  62.         bean.setSex ("Man");
  63.  
  64.         try {
  65.             Map<String, Object> map1 = Conversion.conversionToMap (bean);
  66.             System.out.println (map1.toString() );
  67.             Map<String, Object> map2 = Conversion.conversionToMapByTool (bean);
  68.             System.out.println (map2.toString() );
  69.         } catch (Exception e) {
  70.             e.printStackTrace();
  71.         }
  72.     }
  73.  
  74. }

回复 "java 反射 泛型 demo"

这儿你可以回复上面这条便签

captcha