java注释类型_Java 8类型注释
java注釋類(lèi)型
Lambda表達(dá)式是迄今為止Java 8討論最多和最受促進(jìn)的功能。雖然我同意Lambda是一個(gè)很大的改進(jìn),但我認(rèn)為其他一些Java 8功能由于Lambda的炒作而有所欠缺。 在這篇文章中,我想展示另一個(gè)來(lái)自Java 8的出色特性的示例:Type Annotations。
類(lèi)型注釋是可以放置在使用類(lèi)型的任何位置的注釋。 這包括new運(yùn)算符,類(lèi)型強(qiáng)制轉(zhuǎn)換,Implements子句和throws子句。 類(lèi)型注釋可以改進(jìn)對(duì)Java代碼的分析,并可以確保更強(qiáng)大的類(lèi)型檢查。
在源代碼中,這意味著我們獲得了兩個(gè)用于注釋的新ElementType:
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) public @interface Test { }枚舉值TYPE_PARAMETER允許在類(lèi)型變量(例如MyClass <T>)上應(yīng)用注釋。 目標(biāo)TYPE_USE的注釋可以應(yīng)用于任何類(lèi)型的使用。
請(qǐng)注意,發(fā)布Java 8時(shí),以下示例的注釋將無(wú)法立即使用。 Java 8僅提供定義這些注釋類(lèi)型的功能。 然后由框架和工具開(kāi)發(fā)人員實(shí)際使用它。 因此,這是將來(lái)可能為我們提供的注釋框架的集合。 大多數(shù)示例取自“ 類(lèi)型注釋”規(guī)范和各種Java 8演示。
具有類(lèi)型注釋的簡(jiǎn)單類(lèi)型定義如下所示:
@NotNull?String?str1?=?... @Email?String?str2?=?... @NotNull?@NotBlank?String?str3?=?...類(lèi)型注釋也可以應(yīng)用于嵌套類(lèi)型
Map.@NonNull?Entry?=?...具有類(lèi)型注釋的構(gòu)造函數(shù):
new?@Interned?MyObject() new?@NonEmpty?@Readonly?List<String>(myNonEmptyStringSet)它們也與嵌套(非靜態(tài))類(lèi)構(gòu)造函數(shù)一起工作:
myObject.new?@Readonly?NestedClass()類(lèi)型轉(zhuǎn)換:
myString?=?(@NonNull?String)?myObject; query?=?(@Untainted?String) str;遺產(chǎn):
class?UnmodifiableList<T>?implements?@Readonly?List<T>?{?...?}我們可以將類(lèi)型注釋與泛型類(lèi)型參數(shù)一起使用:
List<@Email?String>?emails?=?... List<@ReadOnly?@Localized?Message>?messages?=?... Graph<@Directional?Node>?directedGraph?=?...當(dāng)然,我們可以嵌套它們:
Map<@NonNull?String,?@NonEmpty?List<@Readonly?Document>>?documents;或?qū)⑺鼈儜?yīng)用于交集類(lèi)型:
public?<E?extends?@ReadOnly?Composable<E>?&?@Localized?MessageSource>?void?foo(...)?{?...?}包括參數(shù)范圍和通配符范圍:
class?Folder<F?extends?@Existing?File>?{?...?} Collection<??super?@Existing?File>?c?=?... List<@Immutable???extends?Comparable<T>>?unchangeable?=?...具有類(lèi)型注釋的泛型方法調(diào)用如下所示:
myObject.<@NotBlank?String>myMethod(...);對(duì)于泛型構(gòu)造函數(shù),注釋遵循顯式類(lèi)型參數(shù):
new?<String>?@Interned?MyObject()拋出異常:
void?monitorTemperature()?throws?@Critical?TemperatureException?{?...?} void?authenticate()?throws?@Fatal?@Logged?AccessDeniedException?{?...?}在instanceof語(yǔ)句中鍵入注釋:
boolean?isNonNull?=?myString?instanceof?@NonNull?String; boolean?isNonBlankEmail?=?myString?instanceof?@NotBlank?@Email?String;最后是Java 8方法和構(gòu)造函數(shù)參考:
@Vernal?Date::getDay List<@English?String>::size Arrays::<@NonNegative?Integer>sort結(jié)論
類(lèi)型注釋是對(duì)Java類(lèi)型系統(tǒng)的有趣補(bǔ)充。 它們可以應(yīng)用于任何類(lèi)型的使用,并可以進(jìn)行更詳細(xì)的代碼分析。 如果要立即使用Type批注,則應(yīng)查看Checker Framework 。
翻譯自: https://www.javacodegeeks.com/2014/02/java-8-type-annotations.html
java注釋類(lèi)型
總結(jié)
以上是生活随笔為你收集整理的java注释类型_Java 8类型注释的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JMetro版本5发布
- 下一篇: 霍廷格对内斯蒂夫-哪一个更好?[2022