反射获取对象的属性值
1 > bean对象
package com.whbs.bean;
?
public class UserBean {
??? private Integer id;
??? private int age;
??? private String name;
??? private String address;
???
??? public UserBean(){
?????? System.out.println("实例化");
??? }
???
??? public Integer getId() {
?????? return id;
??? }
??? public void setId(Integer id) {
?????? this.id = id;
??? }
??? public int getAge() {
?????? return age;
??? }
??? public void setAge(int age) {
?????? this.age = age;
??? }
??? public String getName() {
?????? return name;
??? }
??? public void setName(String name) {
?????? this.name = name;
??? }
??? public String getAddress() {
?????? return address;
??? }
??? public void setAddress(String address) {
?????? this.address = address;
??? }
???
???
???
}
?
2 > 反射测试
?
package com.whbs.test;
?
import java.lang.reflect.Field;
import java.lang.reflect.Method;
?
import com.whbs.bean.UserBean;
?
public class Test1 {
?
??? public static void main(String[] args) throws Exception {
?
??????
?????? /*
?????? ?* 实列化类 方法1
?????? ?*/
?????? //String classPath = "com.whbs.bean.UserBean";
?????? //Class cla = Test1.class.getClassLoader().loadClass(classPath);
?????? //Object ob = cla.newInstance();
??????
?????? /*
?????? ?* 实列化类 方法2
?????? ?*/
?????? UserBean bean = new UserBean();
?????? bean.setId(100);
?????? bean.setAddress("武汉");
??????
?????? //得到类对象
?????? Class userCla = (Class) bean.getClass();
??????
?????? /*
?????? ?* 得到类中的所有属性集合
?????? ?*/
?????? Field[] fs = userCla.getDeclaredFields();
?????? for(int i = 0 ; i < fs.length; i++){
?????????? Field f = fs[i];
?????????? f.setAccessible(true); //设置些属性是可以访问的
?????????? Object val = f.get(bean);//得到此属性的值???
??????
?????????? System.out.println("name:"+f.getName()+"/t value = "+val);
??????????
?????????? String type = f.getType().toString();//得到此属性的类型
?????????? if (type.endsWith("String")) {
????????????? System.out.println(f.getType()+"/t是String");
????????????? f.set(bean,"12") ;?? ???? //给属性设值
?????????? }else if(type.endsWith("int") || type.endsWith("Integer")){
????????????? System.out.println(f.getType()+"/t是int");
????????????? f.set(bean,12) ;? ???? //给属性设值
?????????? }else{
????????????? System.out.println(f.getType()+"/t");
?????????? }
??????????
?????? }
??????
??????
?????? /*
?????? ?* 得到类中的方法
?????? ?*/
?????? Method[] methods = userCla.getMethods();
?????? for(int i = 0; i < methods.length; i++){
?????????? Method method = methods[i];
?????????? if(method.getName().startsWith("get")){
????????????? System.out.print("methodName:"+method.getName()+"/t");
????????????? System.out.println("value:"+method.invoke(bean));//得到get 方法的值
?????????? }
?????? }
??? }
?
}