java反射机制获取成员变量调用和调用实例方法的实现

来源:互联网 发布:俄罗斯新纳粹 知乎 编辑:程序博客网 时间:2024/05/22 13:58

          昨晚对Java反射机制感兴趣,写了下面代码,包括反射机制里的通过实例获得类名、用构造子构造函数、获取类的成员变量等。也描述了构造javabean的set和get方法,以及通过反射机制去调用实例地方法,主要实现见如下代码,有详细注释,代码说明:一、二部分代码必须要有

 

 

一、实现java反射机制类

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.TypeVariable;
public class BeanUtil {
 
 public void getFile(Object dto) {
      Class dtoClass = dto.getClass();//通过实例获得类名
      Constructor[] cons = dtoClass.getConstructors();//获得构造子,用于实例化对象
  Field[] field = dtoClass.getDeclaredFields();//获取字段名称,存放到数组
  Object [] arg={3,"赵继彬","20","男","男"};
  
  Class[] ddd = new Class[arg.length];//构造Class数组,用于存放参数类型
  try {
   for (int j = 0; j < cons.length; j++) {
    Method method;
    Object ob = cons[j].newInstance(null);//构造实例相当于new Object()
    for (int i = 0; i < field.length; i++) {//根据字段数组的长度,构造set方法
     String stt = field[i].getName();
     String fisrt = stt.substring(0, 1);//取第一个字母
     String upFisrt = fisrt.toUpperCase();//将第一个字母转换为大写
     String seter = "set" + upFisrt + stt.substring(1);//合成set方法
     ddd[i] = arg[i].getClass();//指定调用方法的类型
     method = dtoClass.getMethod(seter, ddd[i]);//通过方法名获取dtoClass的方法,参数类型为ddd[i]的类型
     method.invoke(ob, arg[i]);//通过dtoClass的实例调用seter方法,arg[i]为参数值
     System.out.println(seter);
     
    }
    for (int i = 0; i < field.length; i++) {
     String stt = field[i].getName();
     String fisrt = stt.substring(0, 1);
     String upFisrt = fisrt.toUpperCase();
     String geter = "get" + upFisrt + stt.substring(1);
     method = dtoClass.getMethod(geter,null);
     System.out.println(stt+"=="+method.invoke(ob, null));
    }

   }
   
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

 public static void main(String[] a) {
  BeanUtil bu = new BeanUtil();
  BeanDto dto = new BeanDto();
  bu.getFile(dto);
 }
}

 

二、实体bean也是我们要用反射机制获取的对象

public class BeanDto {
 private Integer id;
 private String name;
 private String age;
 private String sex;
 
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getAge() {
  return age;
 }
 public void setAge(String age) {
  this.age = age;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
 

}

原创粉丝点击