前言
在 Java
中通常对一些方法进行一些注解操作,但是很多注解在 Java
代码上没有问题,如果切换到 Kotlin
上时,如果继续使用这些注解就会存在一些问题,本篇主要对比一些常用 Java
注解和 Kotlin
注解使用转换。
Deprecated
在 Java
方法中,如果需要废弃一个方法,只需要在方法钱加上 @Deprecated
即可,例如这样:
@Deprecated
public void test(){
}
但是如果在 Kotlin
代码中直接使用这个注释,就存在问题了:
翻看源码发现,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
存在三个参数,其中第二个和第三个参数存在默认值,第一个参数 message
没有,也就是说,要想正常使用时,必须要带上 message
信息,正常写法是这样:
@Deprecated("xxx")
fun testKt(){
}
三个参数说明:
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
,如果调用了这类API直接编译报错 -
HIDDEN
:直接隐藏该API
-
-
replaceWith
:指定可用于替换已弃用的函数,属性或类的代码片段。不明白?一图看懂:
SuppressWarnings 与 Suppress
在 Java
代码中,如果需要消除一些编译时的警告,通常使用 @SuppressWarnings("xxx")
来进行解决的,而在 Kotlin
中,不能使用这个注解,需要使用Kotlin中内置的 @Suppress("xxx")
带替代。
例如,做 SDK
开发的时候,通常有很多对外 API
,正常情况下,不调用的时候,会有如下类似警告:
对于有强迫症的来说这很难受,为了消除这种警告我们可以这样:
@Suppress("unused")
fun hello() {
println("hello")
}
如果是Java代码则写成这样:
@SuppressWarnings("unused")
public void hello(){
}
又例如,有时候需要做一些类型转换时:
此时为了消除这种警告,我们可以这样操作:
fun unChecked(){
val list: List<Any> = emptyList()
@Suppress("UNCHECKED_CAST")
list as List<String>
}
如果在Java代码中则需要写成 @SuppressWarnings("unchecked")
Kotlin 中,Suppress 支持消除的警告有很多,可以通过源码查阅更多相关参数信息,例如:
总结
其实这两种注解使用起来都不难,主要是平常 Java
代码写习惯了,切换到 Kotlin
之后,很多 API
并不熟悉,需要在开发过程中慢慢了解与积累,俗话说好记性不如烂笔头就是这么个道理。