美文网首页Android开发Android开发经验谈Android开发
Kotlin之Deprecated和Suppress注解使用

Kotlin之Deprecated和Suppress注解使用

作者: XuYanjun | 来源:发表于2019-08-13 16:43 被阅读7次

前言

Java 中通常对一些方法进行一些注解操作,但是很多注解在 Java 代码上没有问题,如果切换到 Kotlin 上时,如果继续使用这些注解就会存在一些问题,本篇主要对比一些常用 Java 注解和 Kotlin 注解使用转换。


Deprecated

Java 方法中,如果需要废弃一个方法,只需要在方法钱加上 @Deprecated 即可,例如这样:

@Deprecated
public void test(){

}

但是如果在 Kotlin 代码中直接使用这个注释,就存在问题了:

Deprecated

翻看源码发现,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:指定可用于替换已弃用的函数,属性或类的代码片段。不明白?一图看懂:

    replace

SuppressWarnings 与 Suppress

Java 代码中,如果需要消除一些编译时的警告,通常使用 @SuppressWarnings("xxx") 来进行解决的,而在 Kotlin 中,不能使用这个注解,需要使用Kotlin中内置的 @Suppress("xxx") 带替代。

例如,做 SDK 开发的时候,通常有很多对外 API ,正常情况下,不调用的时候,会有如下类似警告:

hello

对于有强迫症的来说这很难受,为了消除这种警告我们可以这样:
@Suppress("unused")
fun hello() {
    println("hello")
}

如果是Java代码则写成这样:

@SuppressWarnings("unused")
public void hello(){
    
}

又例如,有时候需要做一些类型转换时:

hello

此时为了消除这种警告,我们可以这样操作:

fun unChecked(){
    val list: List<Any> = emptyList()

    @Suppress("UNCHECKED_CAST")
    list as List<String>
}

如果在Java代码中则需要写成 @SuppressWarnings("unchecked")

Kotlin 中,Suppress 支持消除的警告有很多,可以通过源码查阅更多相关参数信息,例如:

hello

总结

其实这两种注解使用起来都不难,主要是平常 Java 代码写习惯了,切换到 Kotlin 之后,很多 API 并不熟悉,需要在开发过程中慢慢了解与积累,俗话说好记性不如烂笔头就是这么个道理。

相关文章

  • Kotlin之Deprecated和Suppress注解使用

    前言 在 Java 中通常对一些方法进行一些注解操作,但是很多注解在 Java 代码上没有问题,如果切换到 Kot...

  • java注解

    jdk自带的注解:1、@Override 重写父类方法2、@Deprecated 方法过时3、@Suppress...

  • Java 注解

    注解 annotation java 自带的注解 @Deprecated 表示当前的元素已经不推荐使用@Overr...

  • Kotlin注解入门

    Kotlin使用annotation class关键字来定义注解。 一、定义注解 Kotlin不允许为注解定义注解...

  • 注解汇总

    java注解 一、标准注解 1、@Override 重写函数2、@Deprecated 不鼓励使用(有更好的方...

  • Kotlin使用注解

    Kotlin的反射也提供了一些支持注解的API。 一、提取注解信息 Kotlin使用kotlin.Annotion...

  • 2018-04-12

    注解机制及其原理 什么是注解 注解也叫元数据,例如我们常见的@Override和@Deprecated,注解...

  • 注解 反射

    注解分类 分为标准注解和元注解 标准注解 @Override 对覆盖超类中的方法进行标记 @Deprecated ...

  • @Deprecated 学习笔记

    开发环境 eclipse 4.7.3a jdk 9 主题 关于@Deprecated 注解 @Deprecated...

  • Java 注解

    JAVA注解 Java 自带注解(系统注解) @Override 表示重写注解 @Deprecated 表示过时的...

网友评论

    本文标题:Kotlin之Deprecated和Suppress注解使用

    本文链接:https://www.haomeiwen.com/subject/rjybjctx.html