反射(类!我叫你,你敢答应吗)

来源:互联网 发布:cnc编程培训多少钱 编辑:程序博客网 时间:2024/04/29 15:26

定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、调用构造函数初始化name、age,使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。

public class Person {    String name;    int age;    public Person(String name,int age) {        this.name=name;        this.age=age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public String toString() {        return "name:"+name+'\t'+"age:"+age;    }}
import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;@SuppressWarnings("all")public class SetPerson {    private String clazzName;    private Class clazz;    private Object obj;    //获得该类的class对象,并创建对象    private void set(String className) throws Exception{         this.clazz=Class.forName(className); //获得该类的class对象        Constructor con= clazz.getConstructor(String.class,int.class); //获得类的构造器        obj= con.newInstance("张三",20); //创建实例    }    //设置年龄    private void setAge(int age) throws Exception{          Field f= clazz.getDeclaredField("age"); //获得类属性         f.setAccessible(true);//就是这么霸道         f.set(obj, age);    }    //调用方法    private void invoke(String name) throws Exception{        Method m = clazz.getDeclaredMethod("setName",String.class);        m.invoke(obj, name);    }    //来秀秀    public void show(String className,int age,String name){        try {            set(className);            System.out.println(obj);            setAge(age);            System.out.println(obj);            invoke(name);            System.out.println(obj);        } catch (Exception e) {            // TODO: handle exception            e.printStackTrace();        }    }    //嗯 你才是老大 大哥你好    public static void main(String[] args) {        SetPerson setp=new SetPerson();        setp.show("com.refect.text.Person", 19, "汪皓");    }}
0 0
原创粉丝点击