zoukankan      html  css  js  c++  java
  • java基础篇4之注解

    1 注解的应用(jdk1.5的新特性)

      一个注解相当于一个特殊的类
      例子:
      @SuppressWarning("deprecation")
      @Deprecated
      @Override

      注解相当于一种标记,在程序中加了注解等于为程序打上了某种标记,编译器和工具类通过反射来了解你的类及某种元素
      上有无何种标记,有标记就去干相应的事
      标记可以加在包,类,字段,方法,方法的参数以及局部变量上

    2 注解的定义与反射调用

      注解类
      @interface A{}

      应用了“注解类”的类
      @A
      class B{}

      对“应用了注解类的类”进行反射操作的类
      class C{
        B.class.isAnnotionPresent(A.class);
        A a = B.class.getAnnotion(A.class)
      }

    例子如下:

      //元注解
        @Retention(RetentionPolicy.RUNTIME)
        public @interface itcastAnnotation{}
    
    
        @itcastAnnotation
        public class AnnotationTest{
            if(AnnotationTest.class.isAnnotionPresent(itcastAnnotation.class)){
                itcastAnnotation annotaion =(itcastAnnotation)AnnotationTest.class.getAnnotion(itcastAnnotation.class);
            }
        }

    Annotation保留生命周期
    1、RetentionPolicy.SOURCE (编译器查看)
    2、RetentionPolicy.CLASSS (默认)
    3、RetentionPolicy.RUNTIME (运行时阶段,检查二进制代码)

    @Target(ElementType.METHOD,ElementType.TYPE)
    注解的应用范围

    3 为注解增加各种属性

      @Retention(RetentionPolicy.RUNTIME)
        public @interface itcastAnnotation{
            String color() default "bule";
            String value(); //只有一个属性,则可以省略属性名称
            int[] arrayAttr() default {1,2,3};
            EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;
            MetaAnnotation annotationAttr() default @MetaAnnotation("lhm");
        }
    
    
        @itcastAnnotation(annotationAttr=@MetaAnnotation("fix"),color="red",arrayAttr={3,4,5})
        @itcastAnnotation("xyz")
        public class AnnotationTest{
            if(AnnotationTest.class.isAnnotionPresent(itcastAnnotation.class)){
                itcastAnnotation annotaion =(itcastAnnotation)AnnotationTest.class.getAnnotion(itcastAnnotation.class);
                annotaion.color//red    
                annotation.annotationAttr().value();//fix    
            }
        }
    
      public @interface MetaAnnotation {
          String value();
      }
  • 相关阅读:
    linux grep (转)
    移除NDK方法
    Android Studio 中 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileDebugAidl'.的问题解答
    [Android] 环境配置之基础开发环境(SDK/Android Studio)(转)
    Rendering Problems: No Android SDK found. Please configure an Android SDK. 怎解决?
    Android Xutils 框架(转)
    Android Studio 简单设置
    Android笔记——Windows环境下Android Studio v1.0安装教程
    Android Studio使用教程(二)
    Android Studio使用教程(一)(转)
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/6624222.html
Copyright © 2011-2022 走看看