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对象呢?如下:
可以看一下它的细节:
先这么简单入个门吧,之后再对反射不断深入。。