快速上手 Kotlin 开发系列之与 Java 互调 (2)

本节将介绍 Kotlin 和 Java 互调过程当中封装类、空值敏感以及静态变量和静态方法的处理java

Kotlin 没有封装类

首先看看如下代码。安全

咱们用 Java 建立一个接口,以下:函数

以后咱们建立一个 A.java 实现这个接口,并在每一个方法中打印对应的类型,int 和 Integer。指针

最后,咱们在 Kotlin 代码中调用它,咱们来看下它的执行结果:cdn

你会发现只调用了 int 参数的方法,经过这个示例能够看出来 Kotlin 是没有封装类的概念的,为了进一步说明,咱们让 Kotlin 的类来实现这个接口:对象

你会发现编译器会报方法名重复的错误,删掉后正常blog

上述例子中若是非要调用 Integer 参数的方法,固然也是能作到的,能够经过反射的方法。接口

Kotlin 空值敏感

仍是经过一个示例来讲明,写一个包含以下静态方法的 Java 类:编译器

以后在 Kotlin 代码中调用这个方法,其中赋值方式有三种,分别是让编译器推断、赋值给不为空的 String 类型以及赋值给可为空的 String? 类型。it

首先看第一种编译器推断类型的方式,当咱们使用编译器查看类型时你会发现它返回的是 String! 的类型,这种类型咱们不能直接声明,这是 Kotlin 与 Java 互调时的一种特有的类型,也能够说成是 Java 的 String 类型。

以后咱们执行 main 函数,看到代码 10 行位置报错,说明为空的值给不可为空的 String 类型赋值会报错!

当咱们注释掉 fmt2 代码继续执行,你会发现编译器会正常编译经过,难道这就说明第 一、3 种方式是可靠的呢?咱们尝试调用 fmt1 的某个方法:

发现会报 NullPointerException 错误。为何会这样呢? 由于 String! 类型 Kotlin 编译器会认为这是兼容类型,你只能是临时地使用,可是若是你调用它的话,就会像 Java 同样去执行,因此就报了 Java 的空指针异常。

反观 fmt3 就不会报错,这就是 Kotlin 的空安全!

【注】当咱们调用 Java 的方法返回类对象的时候,若是你不肯定返回值是否可能为空,你必定要赋值给一个可空类型,这样才能利用 Kotlin 的空安全!

Kotlin 没有静态变量与静态方法

因为 Kotlin 中没有静态变量和静态方法,咱们能够经过上一节中提到的 object 关键字声明的类来间接实现相似 Java 中的静态方法。

若是让其变成真正的静态方法,能够经过使用 @JvmStatic 注解使其变成 Java 的静态方法,这时就能够直接在 Java 类中调用。

以上就是本节内容,欢迎你们关注~

长按关注
相关文章
相关标签/搜索