博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java调用Kotlin函数的坑
阅读量:2351 次
发布时间:2019-05-10

本文共 953 字,大约阅读时间需要 3 分钟。

看下这段代码执行main函数结果如何, 会打印"执行了method函数"么?

class DemoClass {    fun method(str: String) {        System.out.println("执行了method函数")        System.out.println(str)    }}public class HelloJava {    public static void main(String[] args) {        DemoClass object = new DemoClass();        object.method(null);        System.out.println("程序执行完毕");    }}

在kotlin参数校验时就会crash, 并没有执行到函数体内。

Exception in thread “main” java.lang.IllegalArgumentException: Parameter specified as non-null is null: method com.brycegao.basic.DemoClass.method, parameter str
at com.brycegao.basic.DemoClass.method(DemoClass.kt)
at com.brycegao.basic.HelloJava.main(HelloJava.java:6)

反编译DemoClass.class可以看到字节码里有参数判空的操作, 跟Java语言使用的@NonNull有显著区别。 Kotlin声明非空参数类型时,Java传入了null会导致崩溃; 而Java声明函数参数@NonNull, 运行时传入null并不会导致该问题;

在这里插入图片描述

当Kotlin函数可能被Java调用时, 必须将参数声明为可空类型, 即添加问号后缀。

class DemoClass {    fun method(str: String?) {        System.out.println("执行了method函数")        System.out.println(str)    }}

转载地址:http://ukqvb.baihongyu.com/

你可能感兴趣的文章
操作系统之字符集
查看>>
OSI和TCP/IP
查看>>
Redis集群搭建最佳实践
查看>>
ZooKeeper原理及使用
查看>>
Zookeeper集群搭建
查看>>
利用TypePerf.exe查看性能
查看>>
分布式框架Dubbo
查看>>
解决PKIX:unable to find valid certification path to requested target 的问题
查看>>
hibernate.cfg.xml配置详解
查看>>
hibernate+proxool的数据库连接池配置方法
查看>>
eclipse中java项目转成Web项目
查看>>
Java项目svn的迁移
查看>>
Java 编程中异常处理的最佳实践
查看>>
Java异常处理机制
查看>>
Java:回调机制
查看>>
Axis,axis2,Xfire以及cxf对比
查看>>
【工具】人脸识别比对开放平台汇总
查看>>
基于DirectUI技术开发的发卡系统
查看>>
STM32 HAL库、标准外设库、LL库(STM32 Embedded Software)
查看>>
51和AVR单片机
查看>>