java 反射给成员变量设值

1,已知一个类全路径名称,即包名,类名,该类有成员变量,public属性,没有get和set方法。

2,已知另一个Bean类属性和1中的成员变量和类型都一样,将bean转换成json字符串,

3 ,遍历json,key,和1类成员变量相同,则给1中的成员设值。

代码:1 类。

public class NoPerson1 implements Copyable, Serializable{
 
/* *//**
  * serialVersionUID
  *//*
 private static final long serialVersionUID = -2445027108030048781L;*/

 public String name = "";
 
 public String adress = "";
 
 /* (non-Javadoc)
  * @see java.lang.Object#toString()
  */
 @Override
 public String toString() {
  return "NoPerson [name=" + name + ", adress=" + adress + ", age=" + age
    + ", job=" + job + ", country=" + country + "]";
 }

 public int age = 0;
 
 public String job = "";
 
 public String country = "";

 /* (non-Javadoc)
  * @see com.rti.dds.infrastructure.Copyable#copy_from(java.lang.Object)
  */
 @Override
 public Object copy_from(Object arg0) {
  return null;
 }

 

2,类


/**
 * @author Administrator
 *
 */
public class Person1 {
 
 private String name = "";
 
 private String adress = "";
 
 private int age = 0;
 
 private String job = "";
 
 private String country = "";
 
 private String ss = "";

 /**
  * @return the name
  */
 public String getName() {
  return name;
 }

 /**
  * @param name the name to set
  */
 public void setName(String name) {
  this.name = name;
 }

 /**
  * @return the adress
  */
 public String getAdress() {
  return adress;
 }

 /**
  * @param adress the adress to set
  */
 public void setAdress(String adress) {
  this.adress = adress;
 }

 /**
  * @return the age
  */
 public int getAge() {
  return age;
 }

 /**
  * @param age the age to set
  */
 public void setAge(int age) {
  this.age = age;
 }

 /**
  * @return the job
  */
 public String getJob() {
  return job;
 }

 /**
  * @param job the job to set
  */
 public void setJob(String job) {
  this.job = job;
 }

 /**
  * @return the country
  */
 public String getCountry() {
  return country;
 }


 /**
  * @param country the country to set
  */
 public void setCountry(String country) {
  this.country = country;
 }

 /**
  * @return the ss
  */
 public String getSs() {
  return ss;
 }

 /**
  * @param ss the ss to set
  */
 public void setSs(String ss) {
  this.ss = ss;
 }

 /* (non-Javadoc)
  * @see java.lang.Object#toString()
  */
 @Override
 public String toString() {
  return "Person1 [name=" + name + ", adress=" + adress + ", age=" + age
    + ", job=" + job + ", country=" + country + ", ss=" + ss + "]";
 }

 

3 实现方法:

/**
 *
 */
package com.neusoft.reflect;

import java.lang.reflect.Field;
import java.util.Iterator;
import java.util.Set;
import java.util.Map.Entry;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.neusoft.bean.Person;
import com.neusoft.beans.Person1;

/**
 * @author Administrator
 *
 */
public class Main3 {

 /**
  * @param args
  * 作者:Administrator
  * 日期:2015年7月18日下午7:32:07
  * 返回类型:void
  */
 public static void main(String[] args) {
  String className = "com.neusoft.beans.NoPerson1";
  Person1 p = new Person1();
  p.setAdress("Shanghai");
  p.setAge(32);
  p.setCountry("china");
  p.setJob("soft");
  p.setName("liushw");
  p.setSs("hahaahah");
  System.out.println(p.toString());
  String jsonStr = JSON.toJSONString(p);
  System.out.println("jsonStr=:"+jsonStr);
  // json 便利
  JSONObject jsonObj = JSONObject.parseObject(jsonStr);
  Set<Entry<String, Object>> it = jsonObj.entrySet();
  Class c = null;
  try {
   c = Class.forName(className);
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
  
  Object o = null;
  try {
   o = c.newInstance();
  } catch (InstantiationException e1) {
   e1.printStackTrace();
  } catch (IllegalAccessException e1) {
   e1.printStackTrace();
  }
  
  Field[] fs = c.getDeclaredFields();
  for (Iterator iterator = it.iterator(); iterator.hasNext();) {
   Entry<String, Object> entry = (Entry<String, Object>) iterator.next();
   for (int i = 0; i < fs.length; i++) {
    Field f = fs[i];
    f.setAccessible(true); // 设置些属性是可以访问的
    Object val;
    try {
     val = f.get(o);
     System.out.println("name:" + f.getName() + "\t value = " + val);
     // 得到此属性的值
     String type = f.getType().toString();// 得到此属性的类型
     System.out.println("[数据类型:"+type);
     if(f.getName().equalsIgnoreCase(entry.getKey()) ){
      f.set(o, entry.getValue()); // 给属性设值
     }
    } catch (IllegalArgumentException e) {
     e.printStackTrace();
    } catch (IllegalAccessException e) {
     e.printStackTrace();
    }
   }
  }
  System.out.println(o.toString());
 }

}

 

测试结果:

Person1 [name=liushw, adress=Shanghai, age=32, job=soft, country=china, ss=hahaahah]
jsonStr=:{"adress":"Shanghai","age":32,"country":"china","job":"soft","name":"liushw","ss":"hahaahah"}
name:name  value =
[数据类型:class java.lang.String
name:adress  value =
[数据类型:class java.lang.String
name:age  value = 0
[数据类型:int
name:job  value =
[数据类型:class java.lang.String
name:country  value =
[数据类型:class java.lang.String
name:name  value =
[数据类型:class java.lang.String
name:adress  value =
[数据类型:class java.lang.String
name:age  value = 0
[数据类型:int
name:job  value =
[数据类型:class java.lang.String
name:country  value =
[数据类型:class java.lang.String
name:name  value =
[数据类型:class java.lang.String
name:adress  value =
[数据类型:class java.lang.String
name:age  value = 0
[数据类型:int
name:job  value =
[数据类型:class java.lang.String
name:country  value = china
[数据类型:class java.lang.String
name:name  value = liushw
[数据类型:class java.lang.String
name:adress  value =
[数据类型:class java.lang.String
name:age  value = 0
[数据类型:int
name:job  value =
[数据类型:class java.lang.String
name:country  value = china
[数据类型:class java.lang.String
name:name  value = liushw
[数据类型:class java.lang.String
name:adress  value = Shanghai
[数据类型:class java.lang.String
name:age  value = 0
[数据类型:int
name:job  value =
[数据类型:class java.lang.String
name:country  value = china
[数据类型:class java.lang.String
name:name  value = liushw
[数据类型:class java.lang.String
name:adress  value = Shanghai
[数据类型:class java.lang.String
name:age  value = 0
[数据类型:int
name:job  value = soft
[数据类型:class java.lang.String
name:country  value = china
[数据类型:class java.lang.String
NoPerson [name=liushw, adress=Shanghai, age=32, job=soft, country=china]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值