Kotlin中怎么使用Deprecated與Suppress注解?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)從2013年開始,先為寶山等服務建站,寶山等地企業(yè),進行企業(yè)商務咨詢服務。為寶山企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
Deprecated
在 Java 方法中,如果需要廢棄一個方法,只需要在方法錢加上 @Deprecated 即可,例如這樣:
@Deprecated public void test(){ }
但是如果在 Kotlin 代碼中直接使用這個注釋,就存在問題了:
Deprecated
翻看源碼發(fā)現(xiàn),Kotlin 中對 Deprecated 這個注解做了加強:
@Target(CLASS, FUNCTION, PROPERTY, ANNOTATION_CLASS, CONSTRUCTOR, PROPERTY_SETTER, PROPERTY_GETTER, TYPEALIAS) @MustBeDocumented public annotation class Deprecated( val message: String, val replaceWith: ReplaceWith = ReplaceWith(""), val level: DeprecationLevel = DeprecationLevel.WARNING )
源碼中 Deprecated 存在三個參數(shù),其中第二個和第三個參數(shù)存在默認值,第一個參數(shù) message 沒有,也就是說,要想正常使用時,必須要帶上 message 信息,正常寫法是這樣:
@Deprecated("xxx") fun testKt(){ }
三個參數(shù)說明:
message:解釋棄用并建議使用替代 API 的信息
level:指定如何在代碼中報告已棄用的元素用法,level 存在三種枚舉
public enum class DeprecationLevel { /** Usage of the deprecated element will be reported as a warning. */ WARNING, /** Usage of the deprecated element will be reported as an error. */ ERROR, /** Deprecated element will not be accessible from code. */ HIDDEN }
WARNING:僅用于警告 API 使用者,不會中斷其編譯或運行時使用
ERROR:禁止使用該 API,如果調(diào)用了這類API直接編譯報錯
HIDDEN:直接隱藏該 API
replaceWith:指定可用于替換已棄用的函數(shù),屬性或類的代碼片段。不明白?一圖看懂:
replace
SuppressWarnings 與 Suppress
在 Java 代碼中,如果需要消除一些編譯時的警告,通常使用 @SuppressWarnings("xxx") 來進行解決的,而在 Kotlin 中,不能使用這個注解,需要使用Kotlin中內(nèi)置的 @Suppress("xxx") 帶替代。
例如,做 SDK 開發(fā)的時候,通常有很多對外 API ,正常情況下,不調(diào)用的時候,會有如下類似警告:
hello
對于有強迫癥的來說這很難受,為了消除這種警告我們可以這樣:
@Suppress("unused") fun hello() { println("hello") }
如果是Java代碼則寫成這樣:
@SuppressWarnings("unused") public void hello(){ }
又例如,有時候需要做一些類型轉換時:
hello
此時為了消除這種警告,我們可以這樣操作:
fun unChecked(){ val list: List= emptyList() @Suppress("UNCHECKED_CAST") list as List }
如果在Java代碼中則需要寫成 @SuppressWarnings("unchecked")
Kotlin 中,Suppress 支持消除的警告有很多,可以通過源碼查閱更多相關參數(shù)信息,例如:
看完上述內(nèi)容,你們掌握Kotlin中怎么使用Deprecated與Suppress注解的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!