Kotlin和Java互操作时的可空性

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

注:文中demo的kt版本是1.7.10

一、kotlin语言中的可空性设计

    在Java语言中的NPE(NullPointerException)可以说非常常见,而且诟病已久。
Kotlin和Java互操作时的可空性,kotlin,java,kotlin,开发语言
    kotlin做为后起之秀,在空指针的问题上进行了升级,即:把本来运行时才能暴露出来的空指针问题,前置到编译期就能让开发者发现,在编写代码时就显式的声明变量类型是不是可空类型,如果将可空类型赋值给不可空类型,或者不可空类型赋值给可空类型,就会报编译时错误,从而减少在运行时抛出异常的概率。

可空类型赋值给不可空类型编译时错误:
Kotlin和Java互操作时的可空性,kotlin,java,kotlin,开发语言

二、kotlin调用java时的可空性

2.1 kotlin调用java时的平台类型?

    kotlin中调用Java中的变量,会被识别为平台类型,平台类型就像java中的变量一样,可能为空,也可能不为空,需要开发人员在写逻辑代码时正确的理解变量是否可能为空,如果可能为空就必须要进行判空处理,否则就会报NPE,导致程序异常退出。
举例,在kt代码中,调用一个java中的变量:
java代码:

public class LaunchInfo {
    public String type;
}

kotlin调用java的代码:

fun main() {
    println("hello kt!")
    val launchInfo = LaunchInfo()
    // new出来的launchInfo对象的type字段默认为null,
    // 但是在kt中调用java中为null的变量,并没有任何提醒
    var launchType: String = launchInfo.type
}    

如上代码,最终的NPE异常是在运行时被发现,最终其实比直接使用java还多出来一种出现NPE异常的场景,报错如下:

hello kt!
Exception in thread "main" java.lang.NullPointerException: launchInfo.type must not be null
	at com.yyg.kt.HelloKtKt.main(HelloKt.kt:22)
	at com.yyg.kt.HelloKtKt.main(HelloKt.kt)

以上问题是在真实开发过程中遇到过的,本质上还是对kt调用java的可空性处理语法规则不熟悉+逻辑处理不当引起。需要在kt调用java时小心谨慎关注平台类型的可空性,避免在kt调用老的java代码时,报运行时错误,发现时间晚,造成线上问题。

java中不加任何修饰符,被kt调用时可能是可空类型,也可能为空类型:
Kotlin和Java互操作时的可空性,kotlin,java,kotlin,开发语言

2.1 在java中使用注解的方式让kt能识别成可空类型

    对于2.1的问题,如果给LaunchInfo的type字段加上@Nullable注解的话,那么在kt代码中是能在编译期报错的。
Kotlin和Java互操作时的可空性,kotlin,java,kotlin,开发语言
java中增加注解的变量类型,在kt中被识别类型对应如下:
Kotlin和Java互操作时的可空性,kotlin,java,kotlin,开发语言文章来源地址https://www.toymoban.com/news/detail-655408.html

到了这里,关于Kotlin和Java互操作时的可空性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • kotlin 转 Java

    今天突然想研究下有些kotlin文件转为Java到底长什么样,好方便优化kotlin代码,搞了半天发现一个非常简单的Android Studio或者Intellij idea官方插件Kotlin,Kotlin是插件的名字,真是醉了; 这里以AS为例,使用很简单: 1.左边目录栏找到想要的转化的kotlin文件,选中,然后顶部Tools

    2024年02月10日
    浏览(29)
  • 使用Kotlin优化Java开发

    Kotlin是一种静态类型的编程语言,运行于Java虚拟机(JVM)、Android和WebAssembly。由JetBrains开发,其设计的主要目的是支持函数式编程和面向对象编程特性。Kotlin可以与Java互相调用,使得它对于现有Java生态系统中的开发人员来说非常有吸引力。与Java相比,它提供了更多的功能和语

    2024年02月09日
    浏览(30)
  • kotlin 和 java 的区别

    Kotlin(科特林)是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发。Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。除此之外Kotlin还可以编译成二进制代码直接运行在机器上(例如嵌入式设备或 iOS)。 其基础编译器(他们将其改为

    2024年01月22日
    浏览(26)
  • 【Kotlin】从Java转向Kotlin,耐心看完这篇博客就够了。Kotlin快速入门教程分享

    适合群体:Java已经入门的人,如果是零基础,不要勉强!虽然没有深奥的术语,即使有也尽可能通俗易懂 。 Kotlin和Java都是Jvm语言,相同的部分能省则省(篇幅有限),重点是Kotlin。 示例代码的注释很重要。最好可以使用IDEA等开发工具运行一下。 最后创作不易,全部都是自

    2023年04月08日
    浏览(43)
  • 【Java】java和kotlin关于Json写文件

    Java写json文件 Kotlin写json文件

    2024年02月14日
    浏览(26)
  • kotlin实现java的单例模式

    Kotlin的5种单例模式

    2024年02月10日
    浏览(27)
  • Kotlin 和 Java对比,具体代码分析

    Kotlin 和 Java 都是广泛使用的编程语言,它们有一些共同点,例如都追求面向对象编程,但也有许多不同之处。下面是 Kotlin 和 Java 之间的一些比较: 声明变量:Kotlin 使用 val 和 var 来声明不可变和可变变量,而 Java 使用 final 和非 final 修饰符。 类型推断:Kotlin 支持类型

    2024年02月15日
    浏览(29)
  • [AIGC] Java 和 Kotlin 的区别

    好的,我还是以“萌萌哒小码农”的身份继续回答您的问题。 Java 和 Kotlin 是两种不同的编程语言,它们有许多共同点,但也有一些重要的区别。以下是一些常见的 Java 和 Kotlin 的区别: 语法 Kotlin 的语法比 Java 简洁得多,这使得 Kotlin 代码更加易读和可维护。例如,Kotlin 支持

    2024年02月21日
    浏览(23)
  • JAVA代码的Kotlin写法(内含代码示例)

    😄😄个人介绍 光子郎.进行开发工作七年以上,目前涉及全栈领域并进行开发。会经常跟小伙伴分享前沿技术知识,java后台、web前端、移动端(Android,uniapp, 小程序 )相关的知识以及经验体会,不定期会有源码及框架的分享,如果你有相关的知识想要及时了解或者讨论,

    2024年02月08日
    浏览(24)
  • kotlin和java相互转换的实操

    在进行安卓开发时,需要熟悉java语言的同时还要对kotlin有所了解,但是这对小白来说是非常不友好的,但是android studio自带工具,可以实现java和kotlin之间的相互转换。 1.将android studio停留在要转java源文件的kt文件页面 2.点击工具栏的Tools-Kotlin-Show Kotlin Bytecode 3.点击Decompile 4.成

    2024年02月15日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包