java反射机制获取 成员变量名字

package jp.co.nextep.mms.webapp.common.token;

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;
	 }


	}


package jp.co.nextep.mms.webapp.common.token;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class BeanUtil {

	public void getFile(Object dto) {
		Class dtoClass = dto.getClass();//通过实例获得类名
		System.out.println(dtoClass.toString());

		Constructor[] cons = dtoClass.getConstructors();//获得构造子,用于实例化对象

		/*  getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。
		getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。*/
		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(stt);
					System.out.println(seter);
					System.out.println(ddd[i]);

				}
				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);
	}
}



//以下是别人的 到此就结束了

  package fanshe;  
      
    import java.lang.reflect.Constructor;  
      
      
    /* 
     * 通过Class对象可以获取某个类中的:构造方法、成员变量、成员方法;并访问成员; 
     *  
     * 1.获取构造方法: 
     *      1).批量的方法: 
     *          public Constructor[] getConstructors():所有"公有的"构造方法 
                public Constructor[] getDeclaredConstructors():获取所有的构造方法(包括私有、受保护、默认、公有) 
          
     *      2).获取单个的方法,并调用: 
     *          public Constructor getConstructor(Class... parameterTypes):获取单个的"公有的"构造方法: 
     *          public Constructor getDeclaredConstructor(Class... parameterTypes):获取"某个构造方法"可以是私有的,或受保护、默认、公有; 
     *       
     *          调用构造方法: 
     *          Constructor-->newInstance(Object... initargs) 
     */  
    public class Constructors {  
      
        public static void main(String[] args) throws Exception {  
            //1.加载Class对象  
            Class clazz = Class.forName("fanshe.Student");  
              
              
            //2.获取所有公有构造方法  
            System.out.println("**********************所有公有构造方法*********************************");  
            Constructor[] conArray = clazz.getConstructors();  
            for(Constructor c : conArray){  
                System.out.println(c);  
            }  
              
              
            System.out.println("************所有的构造方法(包括:私有、受保护、默认、公有)***************");  
            conArray = clazz.getDeclaredConstructors();  
            for(Constructor c : conArray){  
                System.out.println(c);  
            }  
              
            System.out.println("*****************获取公有、无参的构造方法*******************************");  
            Constructor con = clazz.getConstructor(null);  
            //1>、因为是无参的构造方法所以类型是一个null,不写也可以:这里需要的是一个参数的类型,切记是类型  
            //2>、返回的是描述这个无参构造函数的类对象。  
          
            System.out.println("con = " + con);  
            //调用构造方法  
            Object obj = con.newInstance();  
        //  System.out.println("obj = " + obj);  
        //  Student stu = (Student)obj;  
              
            System.out.println("******************获取私有构造方法,并调用*******************************");  
            con = clazz.getDeclaredConstructor(char.class);  
            System.out.println(con);  
            //调用构造方法  
            con.setAccessible(true);//暴力访问(忽略掉访问修饰符)  
            obj = con.newInstance('男');  
        }  
          
    }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值