java 反射给成员变量设值

- 日理万妓 2022-08-02 11:50 229阅读 0赞

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

  1. + ", 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

  1. + ", 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> 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 entry = (Entry) 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 条评论,229人围观)

还没有评论,来说两句吧...

相关阅读