zoukankan      html  css  js  c++  java
  • java注解和获取解释

    元注解
    @Target 表示注解可以用于哪些地方,CONSTRUCTOR:构造器,FIELD:字段(包括 enum 实例),LOCAL_VARIABLE:变量,METHOD:方法,PACKAGE:包,PARAMETER:参数,TYPE:类、接口(包括注解类型)或者 enum。
    @Retention 表示注解信息保存的时长。SOURCE:注解将被编译器丢弃。CLASS:注解在 class 文件中可用,但是会被 VM 丢弃。 RUNTIME:VM 将在运行期也保留注解,可以通过反射机制读取注解。
    @Documented 将此注解保存在 Javadoc 中
    @Inherited 允许子类继承父类的注解
    @Repeatable 允许一个注解可以被使用一次或者多次(Java 8)
    注解示例

    package com.jay.SpringBootStudy8.annotation;
    
    import java.lang.annotation.*;
    
    @Inherited
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD, ElementType.METHOD})
    @Documented
    public @interface SelfDicCode {
        // 定义枚举
        public enum EnumType {
            none,
            project//项目
        }
        // 设置默认值
        public EnumType classType() default EnumType.none;
    }
    

     注解处理

    @Test
        public void testa() throws Exception {
            List<InboundMaster> list = new ArrayList<>();
            list.add(new InboundMaster("1", "1", "xxxxxx"));
    
            List<Project> projects = new ArrayList<>();
            projects.add(new Project("1", "项目1"));
    
            List<Field> fields = new ArrayList<>();//所有字段,包含父类
            Class<?> userClass = InboundMaster.class;
            fields.addAll(Arrays.asList(userClass.getDeclaredFields()));
    //        while (userClass != null) {
    //            fields.addAll(Arrays.asList(userClass.getDeclaredFields()));
    //            userClass = userClass.getSuperclass();
    //        }
            //循环字段,获取 SelfDicCode 注解
            for (Field field : fields) {
                SelfDicCode selfDicCode = field.getAnnotation(SelfDicCode.class);
                if (selfDicCode != null) {
                    field.setAccessible(true);
                    if (selfDicCode.classType() == SelfDicCode.EnumType.project) {
                        list.forEach(x -> {
                            try {
                                String o = field.get(x).toString();//projectId 1
                                Project first = projects.stream().filter(s -> s.getId().equals(o)).findFirst().get();
                                String name = first.getName();
                                x.getParams().put(field.getName(), name);
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            }
                        });
                    }
                }
            }
            list.forEach(System.out::println);
        }
    

      

  • 相关阅读:
    HTML <h1>
    HTML <body> 标签
    如何挑选深度学习 GPU?
    视频动作定位的分层自关注网络:ICCV2019论文解析
    三维点云去噪无监督学习:ICCV2019论文分析
    摄像头定位:ICCV2019论文解析
    深度学习扫地机器人
    细粒度语义分割:ICCV2019论文解析
    目标形体形状轮廓重建:ICCV2019论文解析
    2-2.5-3D的室内场景理解
  • 原文地址:https://www.cnblogs.com/xsj1989/p/15475738.html
Copyright © 2011-2022 走看看