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,在使用多個註解的時候,你能夠重複使用同一個註解。

註解不支持繼承

相關文章
相關標籤/搜索