20190928 On Java8 第二十三章 注解

第二十三章 注解

定义在 java.lang 包中的5种标准注解:java

  • @Override:表示当前的方法定义将覆盖基类的方法。若是你不当心拼写错误,或者方法签名被错误拼写的时候,编译器就会发出错误提示。
  • @Deprecated:若是使用该注解的元素被调用,编译器就会发出警告信息。
  • @SuppressWarnings:关闭不当的编译器警告信息。
  • @SafeVarargs:在 Java 7 中加入用于禁止对具备泛型varargs参数的方法或构造函数的调用方发出警告。
  • @FunctionalInterface:Java 8 中加入用于表示类型声明为函数式接口

基本语法

从语法的角度上看,注解的使用方式和修饰符的使用方式一致。数组

定义注解

@Target 定义你的注解能够应用在哪里(例如是方法仍是字段)。@Retention 定义了注解在哪里可用,在源代码中(SOURCE),class文件(CLASS)中或者是在运行时(RUNTIME)。ide

不包含任何元素的注解称为标记注解(marker annotation)。函数

元注解

Java 语言中目前有 5 种标准注解,以及 5 种元注解。工具

元注解用于注解其余的注解:spa

注解 解释
@Target 表示注解能够用于哪些地方。可能的ElementType参数包括:CONSTRUCTOR:构造器的声明FIELD:字段声明(包括 enum 实例)LOCAL_VARIABLE:局部变量声明METHOD:方法声明PACKAGE:包声明PARAMETER:参数声明TYPE:类、接口(包括注解类型)或者 enum 声明
@Retention 表示注解信息保存的时长。可选的RetentionPolicy参数包括:SOURCE:注解将被编译器丢弃CLASS:注解在 class 文件中可用,可是会被 VM 丢弃。RUNTIME:VM 将在运行期也保留注解,所以能够经过反射机制读取注解的信息。
@Documented 将此注解保存在 Javadoc 中
@Interited 容许子类继承父类的注解
@Repeatable 容许一个注解能够被使用一次或者屡次(Java 8)。

编写注解处理器

使用注解中一个很重要的部分就是,建立与使用注解处理器。Java 拓展了反射机制的 API 用于帮助你创造这类工具。同时他还提供了 javac 编译器钩子在编译时使用注解。code

注解元素

注解元素可用的类型以下所示:继承

  • 全部基本类型(int、float、boolean等)
  • String
  • Class
  • enum
  • Annotation
  • 以上类型的数组

默认值限制

元素要么有默认值,要么就在使用注解时提供元素的值。接口

这里有另一个限制:任何非基本类型的元素, 不管是在源代码声明时仍是在注解接口中定义默认值时,都不能使用 null 做为其值。get

生成外部文件

@Target 注解中指定的每个 ElementType 就是一个约束,它告诉编译器,这个自定义的注解只能用于指定的类型。你能够指定 enum ElementType 中的一个值,或者以逗号分割的形式指定多个值。若是想要将注解应用于全部的 ElementType,那么能够省去 @Target 注解,可是这并不常见。

快捷方式特性:若是你在注解中定义了名为 value 的元素,而且在使用该注解时,value 为惟一一个须要赋值的元素,你就不须要使用名—值对的语法,你只须要在括号中给出 value 元素的值便可。这能够应用于任何合法类型的元素。这也限制了你必须将元素命名为 value.

替代方案

在 Java 8,在使用多个注解的时候,你能够重复使用同一个注解。

注解不支持继承

相关文章
相关标签/搜索