Java 8类型注释
Lambda表達式是迄今為止Java 8討論最多和最受促進的功能。雖然我同意Lambda是一個很大的改進,但我認為其他一些Java 8功能由于Lambda的炒作而有所欠缺。 在這篇文章中,我想展示另一個來自Java 8的出色特性的示例:Type Annotations。
類型注釋是可以在使用類型的任何位置放置的注釋。 這包括new運算符,類型強制轉換,Implements子句和throws子句。 類型注釋可以改進對Java代碼的分析,并可以確保更強大的類型檢查。
在源代碼中,這意味著我們獲得了兩個用于注釋的新ElementType:
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) public @interface Test { }枚舉值TYPE_PARAMETER允許在類型變量(例如MyClass <T>)上應用注釋。 目標TYPE_USE的注釋可以應用于任何類型的使用。
請注意,發布Java 8時,以下示例的注釋將無法立即使用。 Java 8僅提供了定義這些注釋類型的功能。 然后由框架和工具開發人員實際使用它。 因此,這是將來可能為我們提供的注釋框架的集合。 大多數示例取自“ 類型注釋”規范和各種Java 8演示。
具有類型注釋的簡單類型定義如下所示:
@NotNull?String?str1?=?... @Email?String?str2?=?... @NotNull?@NotBlank?String?str3?=?...類型注釋也可以應用于嵌套類型
Map.@NonNull?Entry?=?...具有類型注釋的構造函數:
new?@Interned?MyObject() new?@NonEmpty?@Readonly?List<String>(myNonEmptyStringSet)它們也與嵌套(非靜態)類構造函數一起工作:
myObject.new?@Readonly?NestedClass()類型轉換:
myString?=?(@NonNull?String)?myObject; query?=?(@Untainted?String) str;遺產:
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;或將它們應用于交點類型:
public?<E?extends?@ReadOnly?Composable<E>?&?@Localized?MessageSource>?void?foo(...)?{?...?}包括參數范圍和通配符范圍:
class?Folder<F?extends?@Existing?File>?{?...?} Collection<??super?@Existing?File>?c?=?... List<@Immutable???extends?Comparable<T>>?unchangeable?=?...具有類型注釋的泛型方法調用如下所示:
myObject.<@NotBlank?String>myMethod(...);對于泛型構造函數,注釋遵循顯式類型參數:
new?<String>?@Interned?MyObject()拋出異常:
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類型系統的有趣補充。 它們可以應用于任何類型的使用,并可以進行更詳細的代碼分析。 如果要立即使用Type批注,則應查看Checker Framework 。
翻譯自: https://www.javacodegeeks.com/2014/02/java-8-type-annotations.html
總結
以上是生活随笔為你收集整理的Java 8类型注释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国数码相机销量出现暴涨 日本和欧洲则大
- 下一篇: Java八岁生日快乐!