Annotation
来源:互联网 发布:华南理工大学 知乎 编辑:程序博客网 时间:2024/06/06 00:01
import java.lang.annotation.ElementType;import java.lang.annotation.Target;import javax.lang.model.element.Element;public class Annotationj {/**2017-02-22 21:13 * 元数据MetaData的支持 * Annotation 注解 * 这些标记可以在编译、类加载、运行时被读取,并执行相应的处理 * 通过使用注解可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充的信息 * 代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署 * Annotation 提供了一种为程序元素设置元数据的方法 * Annotation 就像修饰符一样 * 可修饰包、类、构造器、方法、成员变量、参数、局部变量的声明 * 这些信息都被存储在Annotation的 name=value * * * Annotation是一个接口,程序可以通过反射来获取指定程序元素的Annotation对象 * 然后通过Annottion 对象来取得注解里的元数据 * * Annotation 能被用来为程序元素设置元数据 * Annotation 不影响程序程序代码的执行 * 要想Annotation 在运行时起一定的作用 * 只有通过某种配套的工具对Annotation中的信息进行访问和处理 * 访问和处理Annotation的工具统称APT Annotation Processing Tool * * * @ 修饰符 * * 5个基本Aoontation * @Override * 指定方法覆载 强制一个子类必须覆盖父类的方法 * 作用就是告诉编译器检查这个方法,保证父类要包含一个被该方法重写的方法,否则就会编译错误 * 只能修饰方法 * @Deprecated * 表示某个程序元素已经过时,其他程序使用已过时的类、方法时,编译器将会给出警告 * @SuppressWarnings * 取消该类某个编译器警告,同时修饰该类里的某个方法取消显示另一个编译器警告,那么该方法将会同时取消显示这两个编译器警告 * 通常没有泛型限制的集合会引起编译器警告 * @SafeVarargs 抑制警告 * 堆污染警告 * 泛型擦除时引发unchecked * 引发这种错误原因称为 堆污染 Heap pollution * 当把一个 不带泛型的对象赋给一个带泛型的变量时,就会发生这种堆污染 * @FunctionInterface * 接口中只有一个抽象方法,该接口就是函数式接口 * 用来指定某个接口必须是函数式接口 * *//**2017-02-22 21:42 * annotation 包下提供6个meta annotation 元 Annotation * 五个元annotation 都用于修饰其他的Anntation定义 * @retention * 只能用于修饰Annotation定义 * 指定被修饰的Annotation能保留多长时间 * * @Target * 只能修饰一个Annotation定义 * 指定被修饰的Annotation能用于修饰那些程序单元//@Target(ElementType.CONSTRUCTOR) 修饰构造器 * * @Documented * 指定被修饰的 将被javadoc提取成文档 * * @inherited * 被修饰的 annotation将具有继承性 * 其子类将被自动被 @ 修饰 * *//**2017-02-22 21:58 * 自定义的注解接口 继承了Annotation 接口 * 可以通过反射看到MyTag接口包含了Annotation里的方法 * * * 是否可以包含成员变量,分为两类 * 标记Annotation * 没有定义成员变量的Annotation 类型被称为标记 * 这种Annotation仅利用自身的存在与否来提供信息 * * 元数据Annotation * 包含成员变量的Annotation 因为他们可以接受更多的元数据 * 也被称为元数据Annotation * *//**2017-02-22 22:01 * 提取Annotation信息 * 使用Annotation修饰了的类、方法、成员变量等成员之后 * 这些Annotation不会自己生效,必须由开发者提供相应的工具来提取并处理Annotation信息 * * java使用Annotation接口来代表程序元素前面的注解,该接口是所有注解的父接口 * java.lang.reflect包 * AnnotationElement接口主要有以下实现类 * -----Class * -----Constructor 构造器 * -----Field成员变量 * -----Method * -----Package * * 该包下只要包含一些实现反射功能的工具类 * 只有当定义Annotation时使用了@Retention(RetentionPolicy.RUNTIME)修饰时 * 该Annotation才会在运行时可见 * jvm才会在装在class文件时读取并保存在class文件中的Annotation * * AnnotationElement接口时所有程序元素的父接口 * 程序可以通过反射获取某个类的AnnotationElement对象之后 * 程序就可以调用该对象的方法来访问Annotation信息 * *//**2017-02-22 22:14 * 重复注解 * java 8 允许使用多个相同类型的Annotation 来修饰同一个类 * 重复注解只是一个简化写法,这种简化写法是一种假象 * 多个重复注解其实会被作为 容器注解 的value成员变量的数组元素 *//**2017-02-22 22:18 * * ElementType枚举 增加了 TYPE_PARAMETER TYPE_USE * 允许定义枚举时使用@Target(ElementType.TYPE_USE)修饰 * 这种注解被称为Type Annotation 类型注解 * * Type Annotation 可以在任何用到类型的地方使用 * 创建对象 new * 类型转换 * 使用implements实现接口 * 使用throws声明异常 *//**2017-02-22 22:24 * 编译时 处理 Annotation * APT Annotation Processing Tool 是一种注解工具 * 对源代码文件进行检测 * 找出源文件所包含的Annotation 信息 * 针对Annotation信息 进行额外的处理 * * javac.exe -processor 选项可以指定一个Annotation处理器 * 每个处理器都需要实现 */@Testannotation // 使用自己定义的 注解(age = 0, name = "")public static void main(String[] args) {}//定义一个简单的TYPE 不带任何成员变量@Target(ElementType.TYPE_USE)@interface NotNull{}public @interface Testannotation{String name();int age();}}
0 0
- annotation
- Annotation
- Annotation
- Annotation
- Annotation
- Annotation
- Annotation
- Annotation
- annotation
- Annotation
- Annotation
- @Annotation
- Annotation
- Annotation
- Annotation
- Annotation
- Annotation
- Annotation
- ssm项目的简单搭建
- CSS属性display和visibility 区别
- 238. Product of Array Except Self
- QT初学之父子窗体
- 什么时候使用静态static?
- Annotation
- POJ 3169 图论 差分约束系统
- 编译带有IORT表的UEFI
- 如何快速替换mysql数据库的某个字段的数据改为**
- CentOS 6.x 安装Google Chrome
- 9.CRM销售机会的修改和删除
- Scanner的使用
- combobox绑定datasource的问题,selectvalue的奇怪表现
- PHP中文乱码的常见解决方法总结