利用反射自动封装成实体对象

利用此方法的时候需要传递的参数的名称,必须以行号结尾,去掉行号就是属性名称,比如页面传递name+rowNo,那么实体对象的属性名应该为name。代码如下

//获取页面数据,自动封装成bean对象
	public List getObjectList(Class clazz,String[] rowNos) throws Exception{
		List objList = new ArrayList();
		for(int i=0;rowNos!=null && i<rowNos.length;i++){
			//创建对象实例
			Object object = clazz.newInstance();
			//获取类声明的属性
			Field[] fields = clazz.getDeclaredFields();
			
			StringBuffer buffer = null;
			//遍历属性,执行封装
			for(int j=0;j<fields.length;j++){
				//获取属性的名字
				String fieldName = fields[j].getName();
				//得到参数的名字
				String paraName = fields[j].getName()+rowNos[i];
				
				//如果获取参数值为空则继续循环
				String value = getValueNull(paraName);
				if(value==null){
					continue;
				}
				
		        //参数值
				Object[] paramValue =new Object[1];
				if(fields[j].getType().toString().equals("class java.lang.String")){
					paramValue[0]=value;
				}
				if(fields[j].getType().toString().equals("class java.lang.Integer")){
					paramValue[0]=new Integer(value);
				}
				if(fields[j].getType().toString().equals("class java.lang.Double")){
					paramValue[0]=new Double(value);
				}
				if(fields[j].getType().toString().equals("class java.util.Date")){
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
					paramValue[0]=sdf.parse(value);
				}
				
				//参数类型
				Class[] paramType= {fields[j].getType()}; 
				
				//得到set方法的名字
				buffer = new StringBuffer("set");
		        buffer.append(fieldName.substring(0, 1).toUpperCase());  
		        buffer.append(fieldName.substring(1)); 
		        //获取放回
		        Method method = clazz.getDeclaredMethod(buffer.toString(), paramType); 
		        //执行方法
		        method.invoke(object,paramValue);
			}
			//将当前对象放到list中
			objList.add(object);
		}
		return objList;
	}

 

posted @ 2015-01-16 09:39  心灵的呼声  阅读(652)  评论(0编辑  收藏  举报