Java利用反射自动封装成实体对象的方法
程序员文章站
2024-03-01 14:38:40
本文实例讲述了java利用反射自动封装成实体对象的方法。分享给大家供大家参考。具体分析如下:
利用此方法的时候需要传递的参数的名称,必须以行号结尾,去掉行号就是属性名称,...
本文实例讲述了java利用反射自动封装成实体对象的方法。分享给大家供大家参考。具体分析如下:
利用此方法的时候需要传递的参数的名称,必须以行号结尾,去掉行号就是属性名称,比如页面传递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;
}
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;
}
希望本文所述对大家的java程序设计有所帮助。