Java调用Kotlin事项及Kotlin反射初步
继续来研究Java调用Kotlin的一些东东。
@Throws注解:
我们知道在Kotlin中是不存在checked exception的,而在Java中是存在的,那。。如果从Java来调用Kotlin的角度那又是如何做到兼容的呢?下面写一个Kotlin代码:

接下来再用Java来调用此方法:

接下来运行一下:

那。。貌似有点不合理呀,很明显这个方法是一定会抛异常的,那我们主动的try...catch..一下:

看一下异常提示:

其实在Kotlin中可以用@Throws注解来对确定要抛异常的(checked exception)方法进行说明,这样在Java调用时则就可以变成了一个检查异常了,如下:

好,此时如果我们在Java直接调用就会提示需要捕获异常提示了,如下:

此时就符合Java的习惯了,因为FileNotFoundException就是checked exception嘛,所以捕获一下:

空参数:
我们知道,在Kotlin中对于null的处理是非常严格的,如果一个方法参数是一个String不为空的就必须传非空的,而如果是一个String?可为空的那就可以传空,但是!!!在Java中很明显木有这个要求嘛,所以下面用程序来说明这个问题:

好,接下来在Java中来调用一下它:

关键的来了:

很明显当传null时,method()方法体都木有执行到,直接抛异常了,注意这个异常不是空指针异常,是参数不合法异常,那如果修改一下method()方法:

再运行:

Kotlin反射初步:
接下来则来学习一下Kotlin的反射,我们知道在Java中反射的根源是Class,而在Kotlin中的反射根源是KClass,下面先来看一下Kotlin的系统包:


那为啥不像Java那样都集成到rt.jar中呢?其实是由于在早期Kotlin并非内置到Android当中,而在Android中对于性能是比较讲究的,而不像服务器配置比较大可以忽略这么小的一个jar包大小,所以将反射单独弄出来就让在Android写代码根据实际需要来依赖该反射包,如果没用到那就可以不引用了。
好,下面来看下代码:

其实它是KClass的实例,那如果要获取它对应Java的Class对象呢?如下:

可以看一下它的细节:

先这么简单入个门吧,之后再对反射不断深入。。
Java调用Kotlin事项及Kotlin反射初步的更多相关文章
- 类型擦除对Java调用Kotlin的影响
@JvmName: 扩展方法相关: 先来定义一个扩展方法: 好,接下来再来定义一个扩展函数: 此时报错了..看一下错误提示: 其中给的提示有点奇怪,第一个是很明显咱们的扩展函数木有接收参数嘛,为啥提示 ...
- Java调用Kotlin程序深度解析
异常: 在之前我们已经学习在Kotlin中的所有异常都是运行期的,而不像Java分为运行期和非运行期,下面用代码来演示一下,先建一个Java的异常: 然后在Kotlin中来调用一下该Java中的方法 ...
- 尝试Java,从入门到Kotlin(下)
上篇已提(tu)到(cao)Java中的各种坑.习惯了C#的各种特性和语法糖后,再转到Java感觉比较别扭.最后本着反正Java也不是很熟悉,干脆再折腾折腾其他语言的破罐子破摔的心态,逛了一圈JVM语 ...
- Java 程序员快速上手 Kotlin 11 招
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:霍丙乾 近经常会收到一些 "用 Kotlin 怎么写" 的问题,作为有经验的程序员, ...
- 爽翻天!告别Java。一起来使用kotlin开发完整客户端
必须写在前面:从Java转向Kotlin,只需要几天时间! 本篇是kotlin开发Android系列教程的最后一篇.前面几篇介绍了kotlin的基本语法.与java的不同之处等.在本篇文章中,将使用到 ...
- Java反射-初步入门
Java反射-初步入门 学反射先了解什么是反射. 百度百科:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动 ...
- Java 程序员快速上手 Kotlin 11招
收录待用,修改转载已取得腾讯云授权 作者 | 霍丙乾 编辑 | 迷鹿 前言 最近经常会收到一些 "用 Kotlin 怎么写" 的问题,作为有经验的程序员,我们已经掌握了一门或者多门 ...
- 通过对比语法差异,让会JAVA的你快速学会Kotlin的开源宝藏项目
今天有个小伙伴来问TJ君,说自己JAVA用的贼溜,想再学习下Kotlin,问TJ君上手难不难? 怎么说呢?其实TJ君一直觉得语言这方面,是触类旁通.一通百通的,既然JAVA已经贼溜了,想必学其他的语言 ...
- 【Kotlin】初识Kotlin之面向对象
[Kotlin]初识Kotlin之面向对象 1.类 在Kotlin中,类用关键字class来定义 如果一个类具有类体,那么需要使用{ }来写类体内容,如果不需要类体,那么只需要定义类名就可以了 // ...
随机推荐
- Vue父子组件相互传值及调用方法的方案
Vue父子组件相互传值及调用方法的方案 一.调用方法: 1.父组件调用子组件方法: 2.子组件调用父组件方法: 参考:https://www.cnblogs.com/jin-zhe/p/9523782 ...
- Spring 通过@Import实现Bean的注册
今天看到一个神奇的用法, Spring可以通过@Import导入实现了ImportBeanDefinitionRegistrar接口的类来注册那个类. ImportBeanDefinitionRegi ...
- MySQL单机优化---分表、分区、分库
一.分表: 水平分表:根据条件把数据分为N个表(例如:商品表中有月份列,则可以按月份进行水平分表). 使用场景:一张表中数据太多,查询效率太慢. 当需要同时查询被水平分表的多张表时: 在两条SQL语句 ...
- Word页眉实现首页不同、奇偶页不同 、更改页眉横线、页眉文字对齐 -- 视频教程(8)
1. 目标 目标1:实现页眉"首页不同,奇偶页不同" 目标2:更改页眉横线 目标3:页眉文字有三部分:第一部分左对齐,第二部分居中,第三部分右对齐 2. 教程 未完 ...... ...
- jquery下拉单选框可左右移动数据
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本
今天遇到了很奇葩的问题,我本机的是以test环境启动的,调用另一个服务接口的时候返回参数却不同,调用接口是没错,怎么会这样,排查了很久,发现在eureka上注册的另一个服务是testone环境,而这个 ...
- 05 Cookie.Session
Cookie:在浏览器中保存用户的信息 使用:由服务器创建,发送到浏览器保存,之后随着请求发回到服务器 1.创建cookie Cookie cookie = new Cookie("na ...
- golang --写test测试用例
安装gotests插件自动生成测试代码: go get -u -v github.com/cweill/gotests/... 如何编写测试用例 由于go test命令只能在一个相应的目录下执行所有文 ...
- 转!!通俗理解数字加密,数字签名,数字证书和https
原博文地址:https://www.jianshu.com/p/4932cb1499bf 前言 最近在开发关于PDF合同文档电子签章的功能,大概意思就是在一份PDF合同上签名,盖章,使其具有法律效应. ...
- Java中守护线程的总结
在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存 ...