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('男');
}
}