Java 反射和注解

这篇博客详细介绍了Java反射的三种使用方式,包括获取类信息、字段和方法的访问。同时,展示了如何通过反射给实体属性和方法赋值。此外,还讲解了自定义注解`UserData`的创建,并演示了如何使用该注解为实体类的属性赋值。内容深入浅出,适合Java开发者学习理解反射和注解的运用。
摘要由CSDN通过智能技术生成

1.获取反射的三种方法

User user = new User();
Class<User> c = User.class;
Class<? extends User> aClass = user.getClass();
Class<?> user1 = Class.forName("com.atguigu.huawei.entity.User");

2.实体属性DeclaredFields

   //   获取实体所有属性的值
   User u = new User();
   Class<User> clasz= User.class;
   Field[] declaredFields = clasz.getDeclaredFields();
   for (Field field : declaredFields) {
        System.out.println(field.get(u).toString());
    }

   //给实体的属性设值
  User user = new User();
  Class<User> clasz= User.class;
  Field field = clasz.getDeclaredField("idcard");
  //放开私有属性可以设值
  field.setAccessible(true);
  field.set(user,"432522199707245733");
  System.out.println(user.getIdcard());

3.给实体的方法设置

     User user = new User();
     Class<User> clasz= User.class;
     //第一个为方法名,第二个参数一定要对应参数类型传入
     Method method = clasz.getDeclaredMethod("setIdcard", String.class);
     method.setAccessible(true);
     method.invoke(user,"432522199707245773");
     System.out.println(user.getIdcard());

4.自定义一个注解UserData 给Person赋值

public class test {

    public static void main(String[] args) throws Exception {
        Person person = new Person();
        Class<? extends Person> aClass = person.getClass();
        Field[] declaredFields = aClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            if(declaredField.isAnnotationPresent(UserData.class)){
                UserData annotation = declaredField.getAnnotation(UserData.class);
                int age = annotation.age();
                String sex = annotation.sex();
                declaredField.setAccessible(true);
                if(age != 0){
                    declaredField.set(person,age);
                }
                if(!"".equals(sex)){
                    declaredField.set(person,sex);
                }

            }
        }
        System.out.println(person);
    }

    @Target(value = {ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @interface UserData {
        int age() default 0;

        String sex() default "";
    }

    @Data
    static class Person {
        @UserData(age = 11)
        private int age;

        @UserData(sex = "女")
        private String sex;
    }


}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值