基础加强_注解Annotation

来源:互联网 发布:ok三连冠科比数据 编辑:程序博客网 时间:2024/05/01 21:57

  ------- android培训、java培训、期待与您交流! ----------

注解Annotation

一个注解就是一个类,使用注解就在使用这个注解的对象。
注解相当于一种标记,javac编译器,开发工具和其他程序可以用反射来获取注解。
注解可以加在包,类,字段,方法,方法的参数以及局部变量上。

java.lang包的3个基本注解:

@SupressWarnings("deprecation")//注解,压缩警告 RetentionPolicy.SOURCE
@Deprecated//过时 RetentionPolicy.RUNTIME
@Override//重写  RetentionPolicy.SOURCE  使用范围METHOD

java.lang.annotation 注解包

@Retention(value)指示注释类型的注释要保留多久。默认为 RetentionPolicy.CLASS。(CLASS RUNTIME SOURCE 3种)
@Target(value)  包,注解,类,构造方法,字段,方法,方法的参数以及局部变量。默认为任何元素

从代码学习注解的应用:

1、自定义注解  ItcastAnnotation

@Retention(RetentionPolicy.RUNTIME)  //运行时有效@Target({ElementType.METHOD,ElementType.TYPE})  //使用范围为方法和类,采用数组的方式设置属性public @interface ItcastAnnotation {String color() default "blue";String value();//每个注解都有Vlaue()属性int[] arrayAttr() default {3,4,4};EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;MetaAnnotation annotationAttr() default @MetaAnnotation("lhm");}

注解类型的属性:

MetaAnnotation annotationAttr() default @MetaAnnotation("xxxx");
@MyAnnotation(annotationAttr=@MetaAnnotation(“yyy”) )
可以认为上面这个@MyAnnotation是MyAnnotaion类的一个实例对象,同样的道理,
可以认为上面这个@MetaAnnotation是MetaAnnotation类的一个实例对象,调用代码如下:
MetaAnnotation ma =  myAnnotation.annotationAttr();
System.out.println(ma.value());
@MetaAnnotation("xxxx")创建注解的实例

定义注解  MetaAnnotation

public @interface MetaAnnotation {String value();}

测试注解  AnnotationTest类

@ItcastAnnotation(annotationAttr=@MetaAnnotation("flx"),color="red",value="abc",arrayAttr=1) //多个参数,需要分别指定参数值public class AnnotationTest {@SuppressWarnings("deprecation")@ItcastAnnotation("xyz")//如果注解中有一个名称为value的属性,且你只想设置value属性//(即其他属性都采用默认值或者你只有一个value属性),那么可以省略value=部分,例如:@MyAnnotation("lhm")。public static void main(String[] args) throws Exception{System.runFinalizersOnExit(true);//通过反射获取注解属性if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){ItcastAnnotation annotation = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);System.out.println(annotation.color());System.out.println(annotation.value());System.out.println(annotation.arrayAttr().length);System.out.println(annotation.lamp().nextLamp().name());System.out.println(annotation.annotationAttr().value());}Method mainMethod = AnnotationTest.class.getMethod("main", String[].class);ItcastAnnotation annotation2 = (ItcastAnnotation)mainMethod.getAnnotation(ItcastAnnotation.class);System.out.println(annotation2.value());}@Deprecatedpublic static void sayHello(){System.out.println("hi,传智播客");}}

  ------- android培训、java培训、期待与您交流! ----------

原创粉丝点击