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来定义 如果一个类具有类体,那么需要使用{ }来写类体内容,如果不需要类体,那么只需要定义类名就可以了 // ...
随机推荐
- 【python基础】setproctitle的安装与使用
前言 setproctitle模块允许设置进程名称. 安装 pip install setproctitle 使用 参考 1. setproctitle: 完
- Centos7安装部署Rabbitmq教程
依赖关系: 版本依赖一定要提前看清楚. RabbitMQ相关版本依赖关系查看 https://www.rabbitmq.com/which-erlang.html 可以看到要求版本Erlang21.3 ...
- IDEA中类文件显示J,IDEA Unable to import maven project: See logs for details
今天用了下lemon清理了下垃圾后,IDEA打开项目类文件图标由C变为J,在IDEA右侧的Maven Project中点击刷新提示IDEA Unable to import maven project ...
- Unity3D 使用SQLite
使用Unity操作SQLite,需要用到三个库文件,分别是Mono.Data.Sqlite.dll和System.Data.dll和Sqlite3.dll,前两个库文件可以在unity中找到,具体步骤 ...
- 待补充 MySQL必知必会第29章--------数据库维护
备份数据 由于MySQL数据库是基于磁盘的文件,普通的备份系统和里程就能备份MySQL的数据.但是,由于这些文件总是处于打开和使用状态,普通的文件副本备份不一定总是生效.
- 【转】深入理解javascript中的立即执行函数(function(){…})()
javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( f ...
- java中参数" ..."的用法和意思
public static void executebindParam(PreparedStatement pstmt,Object ...os){ int len = os.length; try ...
- 【LEETCODE】66、字符串分类,hard级别,题目:32,72,76
package y2019.Algorithm.str.hard; import java.util.Stack; /** * @ProjectName: cutter-point * @Packag ...
- jQuery基础事件处理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- yii框架中的各种小问题
1.默认路径的修改 2.分页的做法