zoukankan      html  css  js  c++  java
  • @深入注解,在Java中设计和使用自己的注解

    我们用过 JDK给我们提供的  @Override  @Deprecated @SuppressWarning 注解  ,这些注解是JDK给我们提供的 ,我们只是在用别人写好的东西 ,那么我们是否可以自己写注解呢?当然是可以的  。

    我们写的注解包括三个环节 

    1、 注解的声明 ,也就是注解类的定义     形式如下        @interface 来进行注解的声明

    package me.test;   

    import java.lang.annotation.* ;//导入注解包中所有注解

    @Retention(RetentionPolicy.RUNTIME)   //解释如下

    @Target(ElementType.TYPE)//解释如下

    public @interface MyAnnotation              

    }

    @Retention(RetentionPolicy.RUNTIME)   

    指定了注解保留的周期 注解的生命周期有是三个   RetentionPolicy 枚举的三个值代表了三个声明周期  默认是CLASS

    枚举常量摘要

    CLASS
              编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。

    RUNTIME
              编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。

    SOURCE
              编译器要丢弃的注释。

    @Target(ElementType.TYPE) 

    这个标识注解应该标在那里   ElementType的几个枚举值就代表了  注解应该写在的位置

    CONSTRUCTOR
              构造方法声明

    FIELD
              字段声明(包括枚举常量)

    LOCAL_VARIABLE
              局部变量声明

    METHOD
              方法声明

    PACKAGE
              包声明

    PARAMETER
              参数声明

    TYPE
              类、接口(包括注释类型)或枚举声明

    2、 使用了注解的类 或者方法 

    @MyAnnotation

    class  A

    {
    }

    3、 利用反射来操作注解   详细见代码

    Class类有一个 方法

    <A extends Annotation
    A   getAnnotation(Class<A> annotationClass)

    这个方法接受一个注解的字节码参数  ,然后返回这个类所标识的注解对象 ,因为我们标识了一个注解就相当于产生了一个注解对象  。

    booleanisAnnotationPresent(Class<? extends Annotation> annotationClass)

    这个方法判断一个类是否被注解所标识

    下面是代码示例

    MyAnnotationTest.java中

    package me.test;
    import java.lang.annotation.Annotation;
    @MyAnnotation 
    public class MyAnnotationTest 
    {  

        public static void main(String []args)
        {
         if(MyAnnotationTest.class.isAnnotationPresent( MyAnnotation.class))
         { 
           MyAnnotation an=(MyAnnotation)MyAnnotationTest.class.getAnnotation(MyAnnotation.class) ;
           System.out.println(an.toString()); 
         }
        }
    }

    MyAnnotation.java中

    package me.test;
    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.TYPE)
    public @interface MyAnnotation 
    {  

    }

  • 相关阅读:
    Android核心分析之十七电话系统之rilD
    Android核心分析之十六Android电话系统-概述篇
    Android核心分析之十五Android输入系统之输入路径详解
    Android核心分析之十四Android GWES之输入系统
    Android 核心分析之十三Android GWES之Android窗口管理
    Android 核心分析之十二Android GEWS窗口管理之基本架构原理
    Android核心分析 之十一Android GWES之消息系统
    Android核心分析 之十Android GWES之基本原理篇
    Android核心分析 之九Zygote Service
    Android 核心分析 之八Android 启动过程详解
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/5537719.html
Copyright © 2011-2022 走看看