HashMap里的值反射成JavaBean

将值put到到HasMap中,其中HasMap中的key要与你准备反射的javabean里的属性字段一致。如你的javabean是这样的:

public class TUsers implements java.io.Serializable{
    private String id;
    private String name;
    private String pwd;
    ......set()/get().....
}

 那你的HashMap就应该是:

HashMap map = new HashMap();
map.put("id","1");
map.put("name","tcrct");
map.put("pwd","123");

 

然后再创建一个方法如:

public static Object parametersToJavaBean(HashMap map,Class cls){
  Object obj = null;
  try {
   obj = cls.newInstance();
  } catch (Exception e) {
   e.printStackTrace();
  }
  //取出bean里的所有方法
  Method[] methods = cls.getMethods();
  for(int i=0; i<methods.length;i++){
   //取方法名
   String method = methods[i].getName();
   //取出方法的类型
    Class[] cc = methods[i].getParameterTypes();   
             if (cc.length != 1) continue;  
             
   //如果方法名没有以set开头的则退出本次for
   if(method.indexOf("set") < 0 ) continue; 
   //类型
   String type = cc[0].getSimpleName();  
   
   
   try {
    //转成小写
    Object value = method.substring(3).toLowerCase();
    //如果map里有该key
    if(map.containsKey(value)){
     //调用其底层方法
     setValue(type, map.get(value), i, methods, obj);   
    }
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return obj;
 }
  /***  
    * 调用底层方法设置值  
    */  
   private static void setValue(String type, Object value, int i, Method[] method, Object bean){   
          if (value!=null && !value.equals("")){
           try {   
               if(type.equals("String")){   
                //第一个参数:从中调用基础方法的对象  第二个参数:用于方法调用的参数
                   method[i].invoke(bean, new Object[] {value});   
               }   
               else if(type.equals("int") || type.equals("Integer")) {   
                   method[i].invoke(bean, new Object[] { new Integer(""+value) });   
               }   
               else if(type.equals("long") || type.equals("Long")) {   
                   method[i].invoke(bean, new Object[] { new Long(""+value) });   
               }   
               else if(type.equals("boolean") || type.equals("Boolean")) {   
                   method[i].invoke(bean, new Object[] { Boolean.valueOf(""+value) });   
               }   
               else if(type.equals("Date")) {   
                   Date date =null;                                
                   if(value.getClass().getName().equals("java.util.Date")){   
                        date=(Date) value;                        
                   }   
                    else{   
                        String format = ((String)value).indexOf(":")>0?"yyyy-MM-dd hh:mm":"yyyy-MM-dd";   
                        date = Tools.parseDateTime(""+value,format);                          
                    }   
                    if(date!=null){   
                         method[i].invoke(bean, new Object[] {date});                         
                    }   
                }
               else if(type.equals("byte[]")){
                method[i].invoke(bean, new Object[] { new String(value+"").getBytes() });  
               }
           } catch (Exception e) {   
               System.out.println("将linkHashMap 或 HashTable 里的值填充到javabean时出错,请检查!");   
               e.printStackTrace();   
           }  
          }
       }  

 

Tools. parseDateTime()方法:

 public static Date parseDateTime(String dateValue,String format)
 {
  SimpleDateFormat obj = new SimpleDateFormat(format);
  try {
   return obj.parse(dateValue);
  } catch (Exception e) {
      e.printStackTrace();
  }
  return null;
 }

 

 

 

然后调用该方法:

TUsers vo = new TUsers();
this.parametersToJavaBean(map, vo.getClass())
System.out.println(vo.getId());
System.out.println(vo.getName());
System.out.println(vo.getPwd());

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值