zoukankan      html  css  js  c++  java
  • 自定义注解

    问题

    如何通过注解值得到对应成员变量?

    学习注解

    自定义注解

    @Inherited
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Index {
        String name() default "";
    }

    定义User类

    import lombok.Getter;
    import lombok.Setter;
    
    @Setter
    @Getter
    public class User {
        @Index(name = "userNo")
        private int userId;
        @Index(name = "Name")
        private String userName;
    }

    其中lombok的依赖配置为

    <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.2</version>
    </dependency>  

    测试注解

    public class UserTest {
        private void test1() {
            Class<User> clazz = User.class;
            Field[] fields = clazz.getDeclaredFields();
            List<Field> result = new ArrayList<>();
            for (Field field : fields){
                if(field.getAnnotation(Index.class)!=null) {
                    result.add(field);
                }
            }
    
            for(Field list:result){
                System.out.println("被注解的字段为:" + list.getName());
            }
        }
    
        private void test2() {
            Class<User> clazz = User.class;
            Field[] fields = clazz.getDeclaredFields();
            List<String> result = new ArrayList<>();
            for (Field field : fields){
                if(field.getAnnotation(Index.class)!=null) {
                    result.add(field.getAnnotation(Index.class).name());
                }
            }
    
            for(String list:result){
                System.out.println("注解的字段为:" + list);
            }
        }
    
        public static void main(String[] args) {
            UserTest userTest = new UserTest();
            userTest.test1();
            userTest.test2();
        }
    }

    结果

    被注解的字段为:userId
    被注解的字段为:userName
    注解的字段为:userNo
    注解的字段为:Name
    

    解决

    private void test3() {
            Map<String, String> annotation2Field = new HashMap<>();
            Class<User> clazz = User.class;
            
            
            
            Field[] fields = clazz.getDeclaredFields();
            List<String> result = new ArrayList<>();
            for (Field field : fields){
                if(field.getAnnotation(Index.class)!=null) {
                    result.add(field.getAnnotation(Index.class).name());
                    annotation2Field.put(field.getAnnotation(Index.class).name(), field.getName());
                }
            }
            annotation2Field.forEach((k, v)-> System.out.println(k + ":" + v));
    
        }
  • 相关阅读:
    字符编码常识及问题解析
    leptonica 学习笔记2——pixBackgroundNormSimple
    用GitLab Runner自动部署GitBook并不难
    使用Docker搭建简易的 Java Web 环境
    ionic button笔记
    学习Sass之安装Sass(一)
    Exploring Ionic Lists
    Using the Cordova Camera API
    ionic介绍
    angularjs2 学习笔记(六) Form
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/9813664.html
Copyright © 2011-2022 走看看