Kotlin空安全类型之平台类型

这篇具有很好参考价值的文章主要介绍了Kotlin空安全类型之平台类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

众所周知,Kotlin的空安全很方便,能避免绝大部分的空安全问题
一般类型分为:
可空类型如 String?
不可空类型 String

其中可空类型的String?可以赋值null或String类型的值,在使用时必须显式的进行空处理
而不可空类型的String,只能赋值String类型,无法向其赋值null,使用时无需空处理,也不会遇见空指针异常
但为什么我上面说能避免绝大部分的空安全问题呢?是因为Kotlin为了兼容其他语言,还有对应语言平台的平台类型 String!

还有延迟初始化的类型
lateinit var String

当然lateinit不是本篇的重点,我们接下来详细了解一下平台类型

正文

平台类型无法通过Kotlin直接声明出来,只会在使用对应平台语言时出现,比如在jvm平台上使用Java语言

 Kotlin空安全类型之平台类型,Kotlin,Adnroid,kmm,kotlin,开发语言,java,android,kmm

我们在Kotlin中使用Java的api时,如果Java的api没有加空安全注解的话,Kotlin就会将其类型识别为平台类型

Kotlin空安全类型之平台类型,Kotlin,Adnroid,kmm,kotlin,开发语言,java,android,kmm

这时我们可以将这个类型的值当作可空类型处理,也可以当作不可空类型处理(就像在Java中那样)
而如果其的值为null,我们没有?.而是.调用后就会触发空指针异常

Kotlin空安全类型之平台类型,Kotlin,Adnroid,kmm,kotlin,开发语言,java,android,kmm

空指针触发情景

1.将平台类型当作不可空类型使用
比如:
Java.getString().length

由于直接获取平台类型 的属性值,而getString()返回了null,此时就会触发空指针

2.将平台类型传递到方法的非空参数中
比如:

fun a(s:String){}
a(Java.getString())

Kotlin会在编译时给方法的非空参数加上以下校验代码:
Intrinsics.checkNotNullParameter(s, "s");//如果s为null就会抛异常

Kotlin空安全类型之平台类型,Kotlin,Adnroid,kmm,kotlin,开发语言,java,android,kmm

3.可能会成为隐藏的地雷
比如:

        var imei: String = ""
        try {
            imei = getImei()
        } catch (e: Exception) {
            ...
        }
        imei.length()

这里可能会有错觉,如果imei抛异常,就不会修改原有的空字符串imei
但如果getImei()返回了null,这样没有抛异常,且也将imei给赋值为了null,在后续使用的时候才会触发空指针异常

解决方案

1.给Java api增加 @Nullable 或 @NotNull 注解
他们表示Java中类型的空安全性,Kotlin可以直接识别注解,确定其空安全类型
Java中可以在使用的过程中提示一些空安全警告信息

2.尽量将Java api转为Kotlin api使用
这样可以避免平台类型的出现,完善空安全类型

3.如果可以,尽量将平台类型赋值给可空类型或当作可空类型使用

扩展

修改设置可以直接看到Kotlin推断的类型

Kotlin空安全类型之平台类型,Kotlin,Adnroid,kmm,kotlin,开发语言,java,android,kmm

修改完就会变成这样

Kotlin空安全类型之平台类型,Kotlin,Adnroid,kmm,kotlin,开发语言,java,android,kmm

对Kotlin或KMP感兴趣的同学可以进Q群 101786950

如果这篇文章对您有帮助的话

可以扫码请我喝瓶饮料或咖啡(如果对什么比较感兴趣可以在备注里写出来)

Kotlin空安全类型之平台类型,Kotlin,Adnroid,kmm,kotlin,开发语言,java,android,kmmKotlin空安全类型之平台类型,Kotlin,Adnroid,kmm,kotlin,开发语言,java,android,kmm文章来源地址https://www.toymoban.com/news/detail-614455.html

到了这里,关于Kotlin空安全类型之平台类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Flutter跨平台插件开发】如何实现kotlin跟C++的相互调用

    在 Kotlin 中,可以使用 JNI (Java Native Interface) 来调用 C++ 代码 调用步骤: 创建 C++ 文件并实现函数。 在 Kotlin 中声明需要调用的 native 函数并加载 native 库。 调用示例 Flutter 插件项目的例子 在 Flutter 插件中引用已有的 C++ 源码需要以下步骤: 首先,在 Flutter 插件的 android 目录下

    2024年01月25日
    浏览(59)
  • VS Code环境下配置Kotlin语言开发环境

    目录 一、安装VS Code扩展 1.安装Kotlin Language 2. 安装、配置Code Runner 二、安装Kotlin-compiler 1.下载Kotlin-compiler 2.安装JDK 3.配置环境变量 三、测试代码 安装成功后进入Code Runner扩展设置,下滑勾选Code-runner:Run In Terminal  打开Kotlin官网  Kotlin https://kotlinlang.org/  Get started打开Kotlin的官

    2024年02月09日
    浏览(51)
  • Android 安卓开发语言kotlin与Java该如何选择

            如今在Android开发中,应用层开发语言主要是Java和Kotlin,Kotlin是后来加入的,主导的语言还是Java。kotlin的加入仿佛让会kotlin语言的开发者更屌一些,其实不然。         有人说kotlin的引入是解决开发者复杂的逻辑,并且对空指针控制的比较友好,但是我们在开

    2024年02月11日
    浏览(61)
  • Kotlin系列一(快速入门,kotlin的数据类型)

    kontlin可以写脚本 创建一个\\\"script.kts\\\"文件 编写脚本内容 使用 kotlinc -script script.kts 命令运行kotlin脚本 创建一个文件\\\"HelloWorld.kt\\\" 编写内容 使用 kotlinc HelloWorld.kt 编译kotlin代码 使用 kotlin HelloWorld Kt运行编译后的字节码 使用\\\"var\\\"定义变量,变量定义后值可以改变,且可以在定义

    2024年02月03日
    浏览(41)
  • 【Kotlin】Kotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问私有属性 | Java 调用 Kotlin 函数 )

    在 Java 语言 中 , 任何 引用类型变量 都可以为 空 null ; Java 中 八种 基本数据类型 变量 的 默认值 为 0 或 false ; 但是在 Kotlin 语言 中 , 所有的 变量 都是引用类型变量 , 没有基本数据类型 , 默认情况下 所有的变量 都为 非空类型 ; 下面分别定义一个 Java 类 和 Kotlin 脚本 , 在 K

    2024年02月02日
    浏览(61)
  • Kotlin & Compose Multiplatform 跨平台(Android端、桌面端)开发实践之使用 SQLDelight 将数据储存至数据库

    取标题的时候我还在想,我应该写 Compose 跨平台呢还是写 Kotlin 跨平台。 毕竟对于我的整体项目而言,确实是 Compose 跨平台开发,但是对于我这篇文章要说的东西,那其实也涉及不到多少 Compose 相关的内容,更多的应该是 Kotlin Multiplatform 相关的内容。 二者取舍不下,干脆都

    2024年02月15日
    浏览(44)
  • kotlin的数据类型和类型转换

    在 Kotlin 中,数据类型是变量或表达式的属性,确定了存储的数据类型以及可以在该数据上执行的操作。Kotlin 支持与 Java 类似的基本数据类型,但还引入了一些增强的数据类型和类型安全的特性。 Byte:8 位有符号整数 Short:16 位有符号整数 Int:32 位有符号整数 Long:64 位有符

    2024年02月12日
    浏览(38)
  • From Java To Kotlin 2:Kotlin 类型系统与泛型

    上期主要分享了 From Java To Kotlin 1 :空安全、扩展、函数、Lambda。 这是 From Java  to Kotlin   第二期。 From Java  to Kotlin  关键在于 思维的转变 。 Kotlin 中大部分语句是 表达式 。 表达式思维是一种编程思维。 编程思维是一种非常抽象的概念,很多时候是只可意会不可言传的。

    2024年02月08日
    浏览(54)
  • Kotlin之类型系统

    在任何类型后加“?”表示该变量可为空。 val a: Int? = null 。 使用“?.”进行安全调用。 实现方式:仍旧使用if判空。 student?.name 。 使用“?:”运算符。 使用“!!”操作符。 student!!.name 。 调用某个对象的let函数,该对象会作为函数的参数,在函数块内可以通过it指代该对象。返

    2024年02月12日
    浏览(55)
  • Kotlin-变量定义,与类型

    Kotlin可以定义的时候不标明数据的数据类型,编译器会根据初始值确定类型 提供4种类型:Byte、Short、Int、Long 但是Kotlin时安全语言,所以不允许为空,如果需要存储空值的话就需要使用Byte?、Short?、Int?、Long?。 普通类型的整数类型会映射到java的基本类型;带?的数据类

    2024年01月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包