zoukankan      html  css  js  c++  java
  • 20190928 On Java8 第二十三章 注解

    第二十三章 注解

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

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

    基本语法

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

    定义注解

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

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

    元注解

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

    元注解用于注解其他的注解:

    注解 解释
    @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 编译器钩子在编译时使用注解。

    注解元素

    注解元素可用的类型如下所示:

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

    默认值限制

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

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

    生成外部文件

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

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

    替代方案

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

    注解不支持继承

  • 相关阅读:
    【Git&GitHub idea中使用Git 03】
    【Git&GitHub 本地库和远程库交互 02】
    【Git&GitHub 本地库操作 01】
    C Primer Plus学习笔记【11章节】
    Python包,模块理解,以及通过元类自动化注册属性。
    pandas.DataFrame.from_dict的使用介绍
    C Primer Plus学习笔记 第10章 编程练习
    CMOS与BIOS的区别(转帖)
    Python 元类详解 __new__、__init__、__call__[补充说明]
    Python 元类详解 __new__、__init__、__call__[收官之作]
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/11604568.html
Copyright © 2011-2022 走看看