Java学习(八)

Java学习(八)

Annotation概念

用于修饰包、类、构造器、方法、成员变量、参数、局部变量的生命,用于设置元数据,这些信息存储在Annotation的name=value对中

基本的Annotation

  1. @Override,用于指定方法重写,写在子类覆盖父类的方法之前,告知编译器必须检查子类是否重写父类方法

  2. @Deprecated表示内容已经过时,如果再使用,编译器会发出警告

  3. @SuppressWarnings关闭编译器警告,并且会渗透性地作用于该程序元素的所有子元素,使用方法

    @SuppressWarnings(value="unchecked")

  4. @SafeVarargs,屏蔽Java堆污染警告。堆污染:泛型对象和非泛型对象间的相互赋值就会引发堆污染。

  5. @FunctionalInterface,显式声明函数式接口,避免低级错误

JDK的元Annotation

  1. @Retention,用于指定Annotation能保留多长时间:

    RetentionPolicy.CLASS:运行时不可获取Annotation信息

    RetentionPolicy.RUNTIME:运行时可通过反射获取Annotation信息

    RetentionPolicy.SOURCE:只保留在源代码里,编译器直接丢弃这种Annotation

  2. @Target,指定Annotation只能用于修饰哪种程序单元

    例如:@Target(ElementType.FIELD)只能修饰成员变量

    @Target(ElementType.METHOD)只能修饰方法

  3. @Documented,跟API文档有关

  4. @Inherited,指定其修饰的Annotation具有继承性(如果某个类用了某个@Xxx,那么他的子类也将获得@Xxx修饰)

自定义Annotation

使用@interface关键字,例如:

public @interface Test
{
    String name();/*自定义的Annotation变量的形式为方法的形式*/
    int age() default 32; /*也可以这样指定默认值*/
}/*定义一个Annotation*/

@Test(name = "xx", age = 6)/*如果在自定义的Annotation内定义了成员变量,那么在使用时就必须赋值*/
public class MyClass
{
    ......
}

没有成员变量的Annotation又称为标记Annotation,有成员变量的Annotation称为元数据Annotation

提取Annotation

AnnotatedElement接口是所有程序元素的父接口,用于访问程序元素的Annotation信息,但获取程序元素需要使用反射

发布了24 篇原创文章 · 获赞 0 · 访问量 995

猜你喜欢

转载自blog.csdn.net/deltapluskai/article/details/102638604