疯狂-注解
2017-08-27 23:44:29 47 举报
AI智能生成
java自定义注解还是很有用的,能方便开发
作者其他创作
大纲/内容
注解
基本Annotation
5个基本的Annotation:@Override@Deprecated@SuppressWarnings@SafeVarargs : 1.7新增@FunctionalInterface : 1.8新增
限定重写父类方法:@Override
强制子类必须覆盖父类的方法。
@Override告诉编译器,检查父类必须包含一个被该方法重写的方法
当子类拥有和父类完全一样的方法时,默认是overrid(覆盖,重写)
标记已过时:@Deprecated
表明该方法已经过时
抑制编译器警告:@SuppressWarnings
取消指定的编译器警告
需要指定值
java 7的“堆污染”警告与@SafeVarargs
@SafeVarargs修饰引发该警告的方法或构造器@SuppressWarnings(\"unchecked\")修饰
java8的函数式接口与@FunctionalInterface
@FunctionalInterface指定某个接口必须是函数式接口
JDK的元Annotation
使用@Retention
value的成员变量值可以是以下三种: RetentionPolicy.CLASS:记录在class文件中,运行java程序时,JVM不可获取annotation信息RetentionPolicy.RUNTIME:记录在class文件中,运行java程序时,JVM可以获取annotation信息RetentionPolicy.SOURCE:annotation只保留在源码中,编译器直接丢弃这种Annotation
@Retention(value = RetentionPolicy.RUNTIME)@Retention(RetentionPolicy.SOURCE) 当Annotation的成员变量名字为value时,可以直接指定该值,不需要 name=value的形式
@Target
指定Annotation能用于修饰哪些程序单元value指定的值ElementType.ANNOTATION_TYPE : 只能修饰AnnotationElementType.CONSTRUCTOR : 只能修饰构造器ElementType.FIELD : 只能修饰成员变量ElementType.LOCAL_VARIABLE : 只能修饰局部变量 ElementType.METHOD : 只能修饰方法ElementType.PACKAGE : 只能修饰包定义ElementType.PARAMETER : 修饰参数ElementType.TYPE : 修饰类、接口或枚举定义
@Documented
修饰的Annotation类将被javadoc工具提取成文档
@Inherited
修饰的Annotation具有继承性,父类使用了被@Inherited修饰的annotation,则子类也会具有该annotation修饰
自定义Annotation
定义Annotation
使用 @interface关键字自定义annotation
public @interface MyAnnotation { String name(); 有一个name的成员变量 int age() default 20; 缺省值}
提取Annotation信息
<A extends Annotation> A getAnnotation(Class<A> annotationClass);返回该元素上存在的、指定类型的注解,如果不存在,返回null;<A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass);java8新增,获取直接修饰该元素,且指定类型的Annotation,如果不存在,返回nullAnnotation[] getAnnotations();返回该元素上存在的所有注解Annotation[] getDeclaredAnnotations();返回元素上存在的所有注解boolean isAnnotationPresent(Class<? extends Annotation> annotationClass);是否存在指定类型的注解,存在true,不存在false<A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass);<A extends Annotation> A[] getDeclaredAnnotatinosByType(Class<A> annotationClass)
java8新增的重复注解
开发重复注解需要使用@Repeatable修饰
@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface FkTags { FkTag[] value();}@Repeatable(FkTags.class)@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface FkTags { FkTag[] value();}
java8新增的Type Annotation
新增两个(Type Annotation)(类型注解)ElementType.TYPE_PARAMETERElementType.TYPE_USE
Type Annotation 可以用在 创建对象、类型转换、使用implements实现接口、使用throws声明抛出异常
编译时处理Annotation
javac -processor Annotation处理器
RountEnvironment:getElementsAnnotatedWith() : 返回Annotation处理的程序单元,有ElementKind.CLASSElementKind.FIELD....
Element:getEnclosedElements() : 获取定义的所有程序单元,包含变量、方法、构造器、内部类
0 条评论
回复 删除
下一页