zoukankan      html  css  js  c++  java
  • 根据注解修改属性的值

    package reflectTest;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ ElementType.FIELD })
    public @interface zk {
        String value() default "";
    }
    package reflectTest;
    
    public class Dog {
    
        @zk("name")
        private final String name;
        private final int sex;
        private final int weight;
        private final String type;
    
        public Dog(String name, int sex, int weight, String type) {
            this.name = name;
            this.sex = sex;
            this.weight = weight;
            this.type = type;
        }
    
        public String getName() {
            return name;
        }
    
        public int getSex() {
            return sex;
        }
    
        public int getWeight() {
            return weight;
        }
    
        public String getType() {
            return type;
        }
    
        @Override
        public String toString() {
            return "{"name":"" + name + "","sex":"" + sex + "","weight":"" + weight + "","type":"" + type + ""} ";
        }
    }
    package reflectTest;
    
    import java.lang.reflect.Field;
    
    public class RunZk {
    
        public static void main(String[] args) throws Exception {
    
            String key = "name";
            String chgValue = "xxxxxx";
            // 性别: 0:母, 1:公
            Dog dog = new Dog("点点", 0, 25, "哈士奇");
            System.out.println(dog.toString());
            Class<? extends Dog> clazz = dog.getClass();// 获取到对象对应的class对象
            Field[] fields = clazz.getDeclaredFields();//
            for (Field f : fields) {
                if (f.isAnnotationPresent(zk.class)) {
                    zk anno = f.getAnnotation(zk.class);
                    if (anno.value().equals(key)) {
                        System.out.println(f.getName());
                        Field nameField = clazz.getDeclaredField(f.getName());// 获取私有成员变量:name
                        nameField.setAccessible(true);// 设置操作权限为true
                        nameField.set(dog, chgValue);
                    }
                }
            }
            System.out.println(dog.toString());
        }
    }

    有追求,才有动力!

    向每一个软件工程师致敬!

    by wujf

    mail:921252375@qq.com

  • 相关阅读:
    Dataset、DataLoader、DataLoaderIter
    new和malloc区别,delete和delete []区别
    虚函数的调用一定是动态联编吗?
    sizeof操作符的一些例子
    虚基类的作用:消除二义性
    虚函数和纯虚函数和析构函数
    VS统计项目代码行数
    记录平时学习的内容并记录是否完成随笔记录一些资料
    C++中vector使用详细说明 (转)
    Git相关知识点
  • 原文地址:https://www.cnblogs.com/wujf/p/9122626.html
Copyright © 2011-2022 走看看