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));
    
        }
  • 相关阅读:
    (OK) port_lighttpd_to_Android——没有基于android 4.4源码
    Linux添加头文件路径—INCLUDE_PATH
    (OK) 交叉编译hello.c for android (--sysroot),不使用Android.mk和ndk-build
    Building and running Node.js for Android
    编译node-v4.2.1,出现错误:undefined reference to getpwuid_r
    我为什么向后端工程师推荐Node.js
    (OK) 编译 pcre-8.37 静态库
    port_lighttpd_to_Android——基于android 4.4源码
    深受C/C++程序员欢迎的11款IDE
    推荐!国外程序员整理的 PHP 资源大全
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/9813664.html
Copyright © 2011-2022 走看看