本节将介绍 Kotlin 和 Java 互调过程当中封装类、空值敏感以及静态变量和静态方法的处理java
首先看看如下代码。安全
咱们用 Java 建立一个接口,以下:函数
以后咱们建立一个 A.java 实现这个接口,并在每一个方法中打印对应的类型,int 和 Integer。指针
最后,咱们在 Kotlin 代码中调用它,咱们来看下它的执行结果:cdn
你会发现只调用了 int 参数的方法,经过这个示例能够看出来 Kotlin 是没有封装类的概念的,为了进一步说明,咱们让 Kotlin 的类来实现这个接口:对象
你会发现编译器会报方法名重复的错误,删掉后正常blog
上述例子中若是非要调用 Integer 参数的方法,固然也是能作到的,能够经过反射的方法。接口
仍是经过一个示例来讲明,写一个包含以下静态方法的 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 中没有静态变量和静态方法,咱们能够经过上一节中提到的 object 关键字声明的类来间接实现相似 Java 中的静态方法。
若是让其变成真正的静态方法,能够经过使用 @JvmStatic 注解使其变成 Java 的静态方法,这时就能够直接在 Java 类中调用。
以上就是本节内容,欢迎你们关注~