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日下午707
* 返回类型: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
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
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]
还没有评论,来说两句吧...