• Annotation原理


    为什么使用注解:

      1、通过注解,可保存源数据在Java源代码中;并且注解不同于注释,注解享有编译期的类型检查保护。

      2、可在描述符性质的类或接口中抽取重复性的工作,通过注解来简化与自动化这些工作。

    注解本身:

      1、三个点:

       1) 注解的@Target和@Retention

       2) 注解的属性

       3) 注解处理器

    四个元注解:

    @Target 表示注解可以用于什么地方。(ElementType.FIELD 字段,包括enum实例

    /LOCAL_VARIABLE

    /CONSTRUCTOR

    /METHOD

    /TYPE

    /PACKAGE

    /PARAMETER

    @Retention 表示需要在什么级别保存该注解信息。(RetentionPolicy.RUNTIME VM在运行期也保留注解

    /SOURCE 注解将被编译器丢弃

    /CLASS 注解在class文件中可用,但会被VM丢弃

    @Documented 将此注解包含在Javadoc中

    @Inherited 允许子类继承父类上的注解

    注解处理器:

      如果没有用来读取注解的工具,那注解也不会比注释更有用。   ——《Thinking in java》

      原理:

        通过反射得到某一个类上的注解、或者是某一个方法、某一个字段上的注解,然后取到注解的属性值,去完成相应需要的业务工作。

    自定义一个简单注解,通过反射来处理。

    //定义一个注解

    @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME)
    public @interface Display { String value() default "no values"; }
    public class Hello {
       //将自定义注解贴在一个方法上
        @Display("hello")
        public void sayHello(){
    
        }
    }
    // 注解处理器
    public
    class DisplayTracker {    //通过反射得到该方法上的Display注解。 public static void trackDisplays(Class<?> cl){ for(Method m :cl.getDeclaredMethods()){ Display display = m.getAnnotation(Display.class); if(display!=null){ System.out.println(display.value()); } } }
    public static void main(String[] args) { trackDisplays(Hello.class); }
    }

       输出:

      

  • 相关阅读:
    右滑返回上一页
    flutter 启动图
    [题解]NOIP2014
    [题解]LightOJ1289 LCM from 1 to n
    [题解]CodeForces442B Andrey and Problem
    [题解]HDU4035 Maze
    [题解]CodeForces#290(div1)
    SCP-bzoj-1078
    SCP-bzoj-1068
    SCP-bzoj-1054
  • 原文地址:https://www.cnblogs.com/oliverBolg/p/10070619.html
Copyright © 2020-2023  润新知