通过反射获取字段,方法,注解

来源:互联网 发布:达梦数据库下载网盘 编辑:程序博客网 时间:2024/05/29 08:17

自定义一个注解

//自己写的注解@interface表示注解 @Documented @Target(ElementType.METHOD)//添加在方法上的注解 @Retention(RetentionPolicy.RUNTIME)//在运行的时候public @interface Bwei {     public String name() default "恩";     public int age() default 22;}
User类里面

public class User {    public String name;    private String age;    public User(){    }    public User(String name, String age) {        this.name = name;        this.age = age;    }    //注解加在方法上    @Bwei(name ="恩恩",age = 23)    public void sleep(){        System.out.println("User sleep = ");    }    public void eat(String eat,int time){        System.out.println("User eat ="+eat+""+time);    }    public void eat(String eat){        System.out.println("User eat ="+eat);    }    public String toString(){        return "User{" +                "name='"+name+'\''+                ",age="+age+'}';    }}
测试类里面的代码Test.java

/** * 反射注解 * */public class Test {    //psvm    public static void main(String[] args) {        try {            //获取到这个类            Class clazz = Class.forName("com.example.menglucywhh.day1128_create.User");          /*  //获取当前类的所有构造方法,public和private            Constructor[] constructors = clazz.getDeclaredConstructors();            for(Constructor constructor : constructors){                System.out.println("constructor = "+constructor);            }            Constructor constructor = constructors[1];            //设置允许访问            constructor.setAccessible(true);            User user = (User) constructor.newInstance("1509D","11");            System.out.println("user = "+user.toString());*/      /*   //通过参数的class获取指定的构造方法            Constructor constructor = clazz.getConstructor(String.class,String.class);            //创建一个对象            User user = (User) constructor.newInstance("whw","20");            System.out.println(constructor);            System.out.println("user = "+user.toString());*/           // Field[] fields = clazz.getFields();         /*   User user = (User) clazz.newInstance();            //获取当前类的所有属性            Field[] fields = clazz.getDeclaredFields();            for (Field field:fields){                //设置可以访问private的属性                field.setAccessible(true);                System.out.println("field ="+field);                //设置user对象属性值为11,name和age都为11                field.set(user,"11");                //获取user对象的属性值                Object o = field.get(user);                System.out.println("o = "+o);            }            System.out.println("user = "+user.toString());*/        /*  //获取所有的方法 公有和私有           Method[] methods =  clazz.getDeclaredMethods();           //创建一个对象            User user = (User) clazz.newInstance();            for(Method method : methods){                method.setAccessible(true);                System.out.println("method = " + method);            }            Object toString =  methods[0].invoke(user,null);             //调用的是eat 参数是1509D          Object eat =   methods[1].invoke(user,"1509D");            System.out.println("toString = " + eat);            //name 方法名           // String.class 参数的class 参数为string            Method method =  clazz.getMethod("eat",String.class);             //执行 user对象身上的方法 参数是1509            method.invoke(user,"1509");*/        //操作注解            Method method = clazz.getMethod("sleep", null);            //判断这个方法是否有这个注解            boolean isEmpty = method.isAnnotationPresent(Bwei.class);            if(isEmpty){                //获取对应的注解                Bwei bwei = method.getAnnotation(Bwei.class);                System.out.println("bwei = "+bwei.name()+ "  "+bwei.age());            }        } catch (Exception e) {            e.printStackTrace();        }    }}


阅读全文
0 0
原创粉丝点击