使用 kotlin.Deprecated,优雅废弃你的过时代码

简介: 使用 kotlin.Deprecated,优雅废弃你的过时代码

代码废弃


  随着项目的发展,许多老旧的代码面临了过时甚至需要废弃的情景,因此不知道如何系统地废弃代码成为了许多程序员在编程中的痛点,本文将讲解如何使用Kotlin强大的Deprecated注解来完成项目中的代码废弃流程。


Java和Koltin的@Deprecated


  很多Kotlin程序员以前都是写java过来的,而使用的最多的则是java自带的注解,如下:


@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}

  这个注解的作用就是会让IDE知道当前的方法废弃了,仅此而已。如果你希望得到更多的信息,你只能“期盼”作者在注释中给你留下更多的信息,否则你将面对一个过时的方法无所适从。

image.png

java的String中的某个被废弃的构造函数,其代替者则被写在方法注释中

  Java的废弃注解足够的“简陋纯粹”,以至于所有第一次见到这个注解的开发者都能迅速上手,给所有你需要废弃方法、属性、类加上注释即可。

  我们再看看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
)

  可以看出,kotlin的废弃注解不再是一个纯粹的注解,注解中还添加了三个成员属性,我们逐一讲解这些属性的作用:

message:提示用户为什么要废弃这个注解以及推荐用户使用哪些新方法来代替原方法。

replaceWith:将当前废弃的代码块替换成新的代码(重点)。

level:废弃等级,有警告错误隐藏三种。


正确使用kotlin.Deprecated


一、只使用message属性


我们使用以下代码作为演示,一个废弃方法,一个新方法,以及调用它们的方法:

image.png

image.png

给第一个方法添加了Deprecated注解之后,调用处出现了删除线标记,同时鼠标放上去之后可以看到message属性的内容。

到这里kotlin和java的废弃注解依然非常相似,但是我们重新看Deprecated,AS给我们一个大大的警告,说明我们目前的使用并不规范。

image.png


二、配合ReplaceWith属性使用


  上文提到AS告诉我们需要添加一个ReplaceWith对象,于是我们点击提示按钮,可以看到系统为我们自动生成了一个表达式。

image.png

这样有什么用呢,我们回到调用方法的地方,鼠标放上去发现提示变了,多了一个Replace with 'xxx'的按钮。点击按钮,会发现方法代码自动变成了ReplaceWith里面的代码。

image.png

image.png

点击系统提示的Replace with `newTestFun(carOne)`之后,系统为我们自动替换了函数调用。

结论:使用ReplaceWith可以让系统为我们自动替换代码,提高安全性


三、ReplaceWith属性的import


@Target()
@Retention(BINARY)
@MustBeDocumented
public annotation class ReplaceWith(val expression: String, vararg val imports: String)

ReplaceWith还有一个可变的字符串参数,这个是用于expression中包含了其他包的表达式的时候,知道如何正确导包用的,例如我们要在expression中使用安卓的Log,则需要导入Log的包,如下:


@Deprecated("当前方法废弃了,请使用newTestFun", ReplaceWith("Log.d(\"log\", varOne)", "android.util.Log"))
fun deprecatedTestFun(varOne:String,varTwo:Int){
}


四、觉得自己实现ReplaceWith非常麻烦不想写怎么办


如果你和笔者一样有这个烦恼的话,你可以像一开始那样,把注解中的ReplaceWith删掉,然后在需要废弃的方法体中,实现新版的方法,然后再利用系统的提示自动生成ReplaceWith即可。

image.png

点击Add提示之后,注解自动生成了ReplaceWith

image.png


五、合理使用Level


在Jetbrains看来,一个api的废弃需要遵循以下的生命周期(可以跳过某些步骤):

image.png

图片来自互联网

Warning是废弃注解默认的等级,即会在IDE中提示当前api过时了,并提供相应的解决方案,这对于那些调用了也不会有很大问题的api来说是一个不错的选项。

image.png

Error会让调用当前方法的地方产生报错提示,如果你的api已经严重过时,甚至会导致逻辑问题时,建议你使用这个。

image.png

Hidden则会让方法彻底无法被开发者看见,这是一个api即将被删除的倒数第二个阶段,完成测试之后就把api删除了吧。

image.png


总结


合理使用kotlin.Deprecated可以让我们安全高效地替换掉项目中那些老旧过时的代码。


相关文章
|
6月前
|
XML 编译器 Android开发
Kotlin DSL 实战:像 Compose 一样写代码
Kotlin DSL 实战:像 Compose 一样写代码
157 0
|
6月前
|
JSON 监控 数据挖掘
使用Kotlin代码简化局域网监控软件开发流程
使用Kotlin简化局域网监控软件开发,通过获取网络设备的IP和MAC地址,实现实时监控网络流量。示例代码展示了如何创建Kotlin项目,获取网络设备信息,监控网络流量以及进行数据分析和处理。此外,还演示了如何使用HTTP库将数据提交到网站,为网络管理提供高效支持。
147 0
|
2月前
|
自然语言处理 Java 网络架构
解锁跨平台微服务新纪元:Micronaut与Kotlin联袂打造的多语言兼容服务——代码、教程、实战一次打包奉送!
【9月更文挑战第6天】Micronaut是一款轻量级、高性能的Java框架,适用于微服务开发。它支持Java、Groovy和Kotlin等多种语言,提供灵活的多语言开发环境。本文通过创建一个简单的多语言兼容服务,展示如何使用Micronaut及其注解驱动特性实现REST接口,并引入国际化支持。无论是个人项目还是企业应用,Micronaut都能提供高效、一致的开发体验,成为跨平台开发的利器。通过简单的配置和代码编写,即可实现多语言支持,展现其强大的跨平台优势。
51 3
|
2月前
|
API 数据处理 数据库
掌握 Kotlin Flow 的艺术:让无限数据流处理变得优雅且高效 —— 实战教程揭秘如何在数据洪流中保持代码的健壮与灵活
Kotlin Flow 是一个强大的协程 API,专为处理异步数据流设计。它适合处理网络请求数据、监听数据库变化等场景。本文通过示例代码展示如何使用 Kotlin Flow 管理无限流,如实时数据流。首先定义了一个生成无限整数的流 `infiniteNumbers()`,然后结合多种操作符(如 `buffer`、`onEach`、`scan`、`filter`、`takeWhile` 和 `collectLatest`),实现对无限流的优雅处理,例如计算随机数的平均值并在超过阈值时停止接收新数据。这展示了 Flow 在资源管理和逻辑清晰性方面的优势。
60 0
|
3月前
|
安全 Java Android开发
Kotlin字符串秘籍:解锁高效处理与创意应用,让你的代码闪耀不凡!
【8月更文挑战第2天】Kotlin是一门现代化的静态类型语言,以简洁、安全及强互操作性著称,在Android及服务器端开发中广受好评。本文通过与其他语言对比,深入解析Kotlin中字符串的基础和高级用法。Kotlin简化了字符串拼接,支持直接使用`+`操作符,并引入了直观的字符串模板。它提供了丰富的字符串操作函数,如使用索引范围进行子字符串提取,增强了代码的可读性。Kotlin字符串的不可变性提升了程序稳定性。利用扩展函数特性,可以轻松定制字符串行为,提高代码的模块化和重用性。掌握这些技巧能显著提升开发效率和代码质量。
41 1
|
5月前
|
JavaScript 前端开发 Android开发
kotlin安卓在Jetpack Compose 框架下使用webview , 网页中的JavaScript代码如何与native交互
在Jetpack Compose中使用Kotlin创建Webview组件,设置JavaScript交互:`@Composable`函数`ComposableWebView`加载网页并启用JavaScript。通过`addJavascriptInterface`添加`WebAppInterface`类,允许JavaScript调用Android方法如播放音频。当页面加载完成时,执行`onWebViewReady`回调。
|
6月前
|
Java Kotlin
java调用kotlin代码编译报错“找不到符号”的问题
java调用kotlin代码编译报错“找不到符号”的问题
285 10
|
缓存 API Android开发
Kotlin 学习笔记(七)—— Flow 数据流学习实践指北(三)冷流转热流以及代码实例(下)
Kotlin 学习笔记(七)—— Flow 数据流学习实践指北(三)冷流转热流以及代码实例(下)
159 0
|
缓存 Java Kotlin
Kotlin 学习笔记(七)—— Flow 数据流学习实践指北(三)冷流转热流以及代码实例(上)
Kotlin 学习笔记(七)—— Flow 数据流学习实践指北(三)冷流转热流以及代码实例(上)
109 0
|
SQL XML 安全
写更易懂的代码,Kotlin 是这样隐藏复杂度的(一)
写更易懂的代码,Kotlin 是这样隐藏复杂度的(一)
206 0