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对象呢?如下:

可以看一下它的细节:

先这么简单入个门吧,之后再对反射不断深入。。

原文地址:https://www.cnblogs.com/webor2006/p/11571472.html