@Deprecated 注解 (@Documented 、@Retention、@Target)
前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到教程。
// 在看 Unsafe 類源碼時(shí)看到一個(gè)注解:@Deprecated,似曾相識(shí)...
@Deprecated?
用在類或者方法上,表示對(duì)應(yīng)代碼不推薦使用、已經(jīng)過時(shí)。
通常是因?yàn)樗俏kU(xiǎn)的,或者是因?yàn)榇嬖诟玫奶娲桨?。編譯器在非棄用代碼中使用或重寫棄用的程序元素時(shí)發(fā)出警告。
調(diào)用時(shí)可能會(huì)出現(xiàn)刪除線。
補(bǔ)充:
@Documented?
有此注解的內(nèi)容將由javadoc和類似工具記錄。如果用文檔對(duì)類型聲明進(jìn)行了注釋,則其注釋將成為注釋元素的公共API的一部分。
@Retention
@Retention 是一個(gè)元注解,即注解上的注解。
它只有一個(gè) RetentionPolicy 類型的屬性,RetentionPolicy是一個(gè)枚舉,共有3個(gè)值:SOURCE、CLASS、RUNTIME。
這 3 個(gè)值決定了被@Retention所注解的注解(即@Deprecated )被保留的方式。
1、RetentionPolicy.SOURCE:注解只保留在源文件,當(dāng)Java文件編譯成class文件的時(shí)候,注解被遺棄;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加載class文件時(shí)候被遺棄,這是默認(rèn)的生命周期;
3、RetentionPolicy.RUNTIME:注解不僅被保存到class文件中,jvm加載class文件之后,仍然存在;
這3個(gè)生命周期分別對(duì)應(yīng)于:Java源文件(.java文件) ---> .class文件 ---> 內(nèi)存中的字節(jié)碼。
那怎么來選擇合適的注解生命周期呢?
首先要明確生命周期長(zhǎng)度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。
一般如果需要在運(yùn)行時(shí)去動(dòng)態(tài)獲取注解信息,那只能用 RUNTIME 注解,比如@Deprecated使用RUNTIME注解
如果要在編譯時(shí)進(jìn)行一些預(yù)處理操作,比如生成一些輔助代碼(如 ButterKnife),就用 CLASS注解;
如果只是做一些檢查性的操作,比如 @Override 和 @SuppressWarnings,使用SOURCE 注解。
以上 9 行出自:https://www.cnblogs.com/liufei1983/p/9987084.html
?
@Target
限制注解可以應(yīng)用于哪種Java元素類型。只有一個(gè)枚舉數(shù)組類型的屬性:value。
用法如:
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE}) 數(shù)組中的值為注解的作用目標(biāo)。在此,即:CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE。 目標(biāo)范圍枚舉值有:接口、類、枚舉、注解、字段、枚舉的常量、方法、方法參數(shù)、構(gòu)造函數(shù)、局部變量、包等。 public enum ElementType {/** Class, interface (including annotation type), or enum declaration */TYPE,/** Field declaration (includes enum constants) */FIELD,/** Method declaration */METHOD,/** Formal parameter declaration */PARAMETER,/** Constructor declaration */CONSTRUCTOR,/** Local variable declaration */LOCAL_VARIABLE,/** Annotation type declaration */ANNOTATION_TYPE,/** Package declaration */PACKAGE,/*** Type parameter declaration** @since 1.8*/TYPE_PARAMETER,/*** Use of a type** @since 1.8*/TYPE_USE }?
參考:
?https://blog.csdn.net/fengcai0123/article/details/90544338
https://www.cnblogs.com/liufei1983/p/9987084.html
總結(jié)
以上是生活随笔為你收集整理的@Deprecated 注解 (@Documented 、@Retention、@Target)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT-子线程或自定义类操作访问主界面UI
- 下一篇: Qt匿名函数的写法