Java 8 類型註解 Type Annotations

Lambda 表達式是迄今爲止 Java 8 討論和推廣最多的特性。我贊成 Lambda 是一個很大的改進,可是我認爲其餘一些 Java 8 特性因爲 Lambda 而顯得有點暗淡。在這篇文章中,我想展現另外一個很好的 Java 8 特性的一些例子:類型註解html

類型註解是一種能夠放在任何使用類型的位置上的註釋(注:在 Java 8 以前的版本中,只能在聲明式前使用註解)。這包括 new 運算符,類型轉換, implements 子句和 throws 子句。類型註解增強了分析Java代碼的能力,並可以確保更強大的類型檢查。java

在代碼實現上,Java 8爲註解增長了兩個新的註解類型:框架

@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface Test {
}
複製代碼

TYPE_PARAMETER 容許註解被用在類型變量(注:即泛型)的聲明中(好比 MyClass<@Test T>)。 TYPE_USE 容許註解能夠被用在任何類型使用的地方。函數

請注意,在 Java 8 中,如下示例中的註解沒有實際做用。Java 8 僅提供定義這些類型的註釋的功能,而後由框架和工具開發者來實際上使用它們。因此這是一個未來框架會提供給咱們的一個註解集合。如下大多數示例都來自 Type Annotations 規範和各類 Java 8 演示文稿。工具

帶有類型註解的簡單類型定義以下所示:spa

@NotNull String str1 = ...
@Email String str2 = ...
@NotNull @NotBlank String str3 = ...
複製代碼

類型註解也能夠用於嵌套類型code

Map.@NonNull Entry = ...
複製代碼

用於構造函數htm

new @Interned MyObject()
new @NonEmpty @Readonly List<String>(myNonEmptyStringSet)
myObject.new @Readonly NestedClass()
複製代碼

類型轉換繼承

myString = (@NonNull String) myObject;
query = (@Untainted String) str;
複製代碼

繼承ci

class UnmodifiableList<T> implements @Readonly List<T> { ... }
複製代碼

泛型

List<@Email String> emails = ...
List<@ReadOnly @Localized Message> messages = ...
Graph<@Directional Node> directedGraph = ...
Map<@NonNull String, @NonEmpty List<@Readonly Document>> documents;
複製代碼

包括參數邊界和通配符邊界

class Folder<F extends @Existing File> { ... }
Collection<? super @Existing File> c = ...
List<@Immutable ? extends Comparable<T>> unchangeable = ...
複製代碼

拋出異常

void monitorTemperature() throws @Critical TemperatureException { ... }
void authenticate() throws @Fatal @Logged AccessDeniedException { ... }
複製代碼

instanceof 語句

boolean isNonNull = myString instanceof @NonNull String;
boolean isNonBlankEmail = myString instanceof @NotBlank @Email String;
複製代碼

以及最後 Java 8 的方法引用

@Vernal Date::getDay
List<@English String>::size
Arrays::<@NonNegative Integer>sort
複製代碼

結論

類型註解是 Java 類型系統的一個有趣的補充。它們能夠應用於任何類型的使用,並啓用更詳細的代碼分析。若是您如今要使用類型註解,您應該查看 Checker Framework

原文連接:dzone.com/articles/ja…

相關文章
相關標籤/搜索