实体对象:
public class UserInfo {
private byte bt;
private int id;
private short st;
private double db;
private float fl;
private long lg;
private String name;
private String email;
private boolean ifMarriage;
private Date date;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public boolean isIfMarriage() {
return ifMarriage;
}
public void setIfMarriage(boolean ifMarriage) {
this.ifMarriage = ifMarriage;
}
public Long getLg() {
return lg;
}
public void setLg(Long lg) {
this.lg = lg;
}
public byte getBt() {
return bt;
}
public void setBt(byte bt) {
this.bt = bt;
}
public double getDb() {
return db;
}
public void setDb(double db) {
this.db = db;
}
public float getFl() {
return fl;
}
public void setFl(float fl) {
this.fl = fl;
}
public short getSt() {
return st;
}
public void setSt(short st) {
this.st = st;
}
public void setLg(long lg) {
this.lg = lg;
}
调用的方法:
/***
* 对于map是数组的情况,则转换一下,只取第一个值。
* 我想这个东西对于页面有多选框的情况是不适用的
* 因为我们无法知道是多选框还是参数名相同的多个参数。
* 除非我们能够知道参数上传时是有什么类型的参数传过来的
* 是文本框,复选框,还是别的什么东西?
* (除非我们特别的标识一下,比如说复选框:我们的名称加一个c,但是这么弄的话又得加不少的判断条件)
*
* 如果仅仅是相同的name的参数有多个的情况,可以通过加一下观察变量去解决
*
*/
public static void setObjectValue(Map<String,Object> map,Object obj){
try{
Class cl = obj.getClass();
Field[] fl = cl.getDeclaredFields();
for(Field f : fl){
for(String str : map.keySet()){
if(f.getName().equals(str)){
String st = f.getName();
st = "set" + st.substring(0, 1).toUpperCase() + st.substring(1);
Method method = cl.getMethod(st,f.getType());
//对不同的类型要进行不同的类型转换
String typeConver = f.getType().getSimpleName();
if(typeConver.equals("byte")){
method.invoke(obj, Byte.parseByte(map.get(str)+""));
}else if(typeConver.equals("short")){
method.invoke(obj, Short.parseShort(map.get(str)+""));
}else if(typeConver.equals("int")){
method.invoke(obj, Integer.parseInt(map.get(str)+""));
}else if(typeConver.equals("float")){
method.invoke(obj, Float.parseFloat(map.get(str)+""));
}else if(typeConver.equals("long")){
method.invoke(obj, Long.parseLong(map.get(str)+""));
}else if(typeConver.equals("double")){
method.invoke(obj, Double.parseDouble(map.get(str)+""));
}else if(typeConver.equals("String")){
method.invoke(obj,map.get(str));
}else if(typeConver.equals("boolean")){
method.invoke(obj, Boolean.parseBoolean(map.get(str)+""));
}else if(typeConver.equals("Date")){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(map.get(str)+",");
method.invoke(obj,d);
}
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
//对于map的值,暂时只存String的这一种情况。
Map<String,Object> map = new HashMap<String,Object>();
map.put("bt", 1);
map.put("st", 2);
map.put("id", 3);
map.put("db", 1.23);
map.put("fl",1.1);
map.put("lg", 10000L);
map.put("name", "yang");
map.put("email", "xiaoquan328@163.com");
map.put("date", "2012-03-13");
map.put("ifMarriage", false);
UserInfo uinfo = new UserInfo();
Field[] fls = uinfo.getClass().getDeclaredFields();
UserInfoTest.setObjectValue(map, uinfo);
System.out.println(uinfo.getBt());
System.out.println(uinfo.getSt());
System.out.println(uinfo.getId());
System.out.println(uinfo.getLg());
System.out.println(uinfo.getDb());
System.out.println(uinfo.getFl());
System.out.println(uinfo.isIfMarriage());
System.out.println(uinfo.getName());
System.out.println(uinfo.getDate());
System.out.println(uinfo.getEmail());
}
说明:
写jsp的时候,发下request有下面这个方法:request.getParameterMap();(这里每一个key对应的值都是数组。。。。)
我想,既然可以以map的方式去取值,那么,就可以使用反射动态的的去赋值,遂产生了上面的想法。
不过实际开发应用中,出现的情况会比上面写的要复杂不少,肯定会还有许多考虑不到的地方,暂时先写到这,什么时候再想起来什么,再改动吧,争取什么时候把大部分的情况都包含了,那个时候再写“添加”和修改功能,应该就很easy了。。。。
分享到:
相关推荐
给目标对象赋值另一个对象时,只是将源对象的地址指向了目标对象,而并没有执行对象属性的set器,有时需要使用set做通知,本实例通过构造及反射实现类属性自动赋值。
主要介绍了Java 通过反射给实体类赋值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
C#通过反射给对象赋值
主要介绍了C#实现利用反射简化给类字段赋值的方法,涉及C#操作反射的相关技巧,需要的朋友可以参考下
反射进行对象的创建,并在反射的时候,进行赋值
最近有遇到两个类之间的赋值问题,两个类的属性几乎都一样的,所以写了个通过反射获取属性的然后赋值的方法,把一个类的属性的值赋值给另一个类。 框架是.net 4.5 public static D Mapper(S s) { D d = Activator...
主要介绍了java反射机制给实体类相同字段自动赋值实例,具有
这篇文章主要介绍了JavaScript 反射和属性赋值实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java和.NET都有着比较完善的反射机制,用来处理未知的...
反射实现两个类的对象之间相同属性快速赋值,MapperToModel,数据源实体和目标实体将进行转换
下面小编就为大家带来一篇java反射遍历实体类属性和类型,并赋值和获取值的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文实例讲述了asp.net利用反射实现给model类赋值的方法。分享给大家供大家参考,具体如下: /// /// 给model类自动赋值 /// /// 获取查询一个model实例的sql语句 /// <param name=obj>model实例对象 /// ...
反射获取Class类对象的三种方法 2.1 通过全类名的方式获取 2.2 类名.class 2.3 实例对象.getClass() 2.4 总结 3. 反射获取属性变量 3.1 获取所有public修饰符的成员变量 3.2 获取指定字段并赋值 3.3 获取...
反射回去到一个类,类名,类的所有属性,创建对象,给对象中私有属性赋值。还记得刚开始学java的时候,对于java里的私有属性,想要操作它,得需要通过创建对象调用它set或get方法,才能操作这些私有属性。那么对于使用...
昨天在网上看到了一个利用反射表单赋值到实体类对象的一个方法,自己就在加了个方法,从实体对象到表单,觉的很不错非常省事,所以把他写成了一个类,供以后使用
设计一个方法,给一个字符串(类)返回一个对象,对象里面还有属性值 例如考试系统中 Question类型 ATM系统 User类型 Question和User类型都是我们自定义的,这两个类的目的是为了存储值,更像个容器 Service Dao...
反射提供的功能,能在运行时(动态)的 1.获取一个类的所有成员变量和方法 2.创建一个类的对象 a.获取对象成员变量&赋值 b.调用对象的方法 c.判断对象所属的类 在注入内存马的过程当中,我们可能需要用到反射...
先说一下遇到的问题:通过使用GSON泛型进行报文转换的时候想要对部分关键字段加密,...解决过程:首先通过反射获取到bean下的对象名称。 对象名称获取到了之后需要获取对应的值 对值进行加密,然后再重新赋值到该对象
vb.net实现的,负责控制对象和页面控件之间的赋值。只要配置控件的tag,页面控件的所有赋值均可通过该工程实现。其中使用了反射,设计模式等技术。易与扩展,如果新加控件,只需要重载两个函数即可。使用说明附内。
//通过当前的字段对象,给某一个字段赋值取值 field.get(Object obj);//如果是属于非static,就传入一个对象,如果是静态的,就传入null obj:对象 field.set(Object obj, Object value);/...