------- 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());
}
@Deprecated
public static void sayHello(){
System.out.println("hi,传智播客");
}
}