Kotlin基础学习之Deprecated与Suppress注解使用
作者:XuYanjun 发布时间:2023-01-03 10:50:54
前言
在 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 并不熟悉,需要在开发过程中慢慢了解与积累,俗话说好记性不如烂笔头就是这么个道理。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。
来源:https://www.jianshu.com/p/d3fb131d57c7


猜你喜欢
- 出现这种错误的原因可能是:1.本机默认使用(编译)的jdk与该项目所使用的jdk版本不同。2.jdk版本不适用于这个Idea,很典型的一个例
- 本文实例讲述了Android自定义ActionBar的实现方法。分享给大家供大家参考。具体实现方法如下:Android 3.0及以上已经有了
- 如上图所示,日期显示为"MM月DD日",或者其它格式,比如显示年、月、日 或 年月日带时间,设置如下:1、如下图设置,日
- 本文实例为大家分享了C语言实现通讯管理系统的具体代码,供大家参考,具体内容如下#include<stdio.h>#include
- 如果有人对程序的崩溃原因做下统计的话,那么由于对象为空,但是又访问了对象的某个属性而导致的崩溃,也许会是程序崩溃的第一大原因了。比如我们在使
- 本文实例为大家分享了android选择视频文件上传到后台服务器的具体代码,供大家参考,具体内容如下选择本地视频文件附上Demo首先第一步打开
- 以前的左右滑动效果采用自定义scrollview或者linearlayout来实现,recyclerview可以很好的做这个功能,一般的需求
- 一、什么是反射Java Reflaction in Action中的解释:反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的
- 目录构造方法方法介绍reduce归约构造方法// 1.无参数构造方法new ConcurrentHashMap();// 2.指定初始容量n
- 前言:在Java8支持Lambda表达式以后,为了满足Lambda表达式的一些典型使用场景,JDK为我们提供了大量常用的函数式接口。它们主要
- springboot中集成jpa需要再pom文件中添加jpa的jar包,使用springboot的话iju不用自己规定版本号了,自动管理依赖
- Android N 中推出了多窗口支持,项目要求适配多窗口模式,记录一下。1.生命周期:对于完全没有适配多窗口的APP来说,当启用多窗口模式
- 经常看到同事这样写代码:DataSet QueryDB(){ DataSet ds=null;  
- Android canvas drawBitmap方法详解及实例之前自己在自定义view,用到canvas.drawBitmap
- 1.导入 EasyExcel Maven包<!--easyexcel 导出excel依赖--><dependency>
- 1、switch支持String做参数/*** * switch支持字符串做参数 jdk7 * @author huangjiawei */
- 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付。现在,我们讲讲这个公众号支付。公众号支付的应用环境常见的用户通过公
- 一、项目运行环境配置:Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe
- 目录1、IP地址2、端口3、通信协议3.1 TCP/IP协议簇:实际上是一组协议3.2 TCP UDP对比3.3 TCP实现聊天3.4 TC
- 第一个案例为大家分享了Android遍历特定目录下所有文件,包含子目录的,并删除最新创建的。 private boolean deleteL