Kevin Learn Kotlin:Java & Kotlin
Posted Kevin_小飞象
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kevin Learn Kotlin:Java & Kotlin相关的知识,希望对你有一定的参考价值。
虽然 Kotlin 的开发很方便,但当你与他人协作时,总会碰到 Java 与 Kotlin 代码共存的代码项目。
本章就教你如何优雅的实现 Kotlin 与 Java 混合编程。
直接转换
将 Java 转换为 Kotlin
如果你之前使用 Java 语言而没有 Kotlin 开发经验,不用担心,android Studio 会帮你一键转换,将 Java 代码转换成 Kotlin 代码(但是反过来就不行了)。快捷键:Ctrl + Alt + Shift + K
在 Kotlin 中调用 Java 代码
1. 返回 void 的方法
如果一个 Java 方法返回 void,对应的在 Kotlin 代码中它将返回 Unit。
现在你只需要知道在 Java 中返回为 void 的函数,在 Kotlin 中可以省略这个返回类型。
2. 与 Kotlin 关键字冲突的处理
Java 有 static 关键字,在 Kotlin 中没有这个关键字,你需要使用 @JvmStatic 替代这个关键字。
同样,在 Kotlin 中也有很多的关键字是 Java 中是没有的。例如 in,is,data等。如果 Java 中使用了这些关键字,需要加上反引号(`)转义来避免冲突。例如:
// Java 代码中有个方法叫 data()
public void data()
//...
// 转换为 Kotlin 代码需要加反引号转义
fun `data`()
//...
在 Java 中调用 Kotlin 代码
1. static 方法
在 Kotlin 中没有 static 关键字,那么如果在 Java 代码中想要通过类名调用一个 Kotlin 类的方法,你需要给这个方法加入@JvmStatic注解(这个注解只在 jvm 平台有用)。否则你必须通过对象调用这个方法。
/**
* Created on 2022/2/17 9:35
*
* @author Kevin
*/
object StringUtils
@JvmStatic fun isEmpty(str: String): Boolean
return "" == str
fun isEmpty2(str: String): Boolean
return "" == str
Java 调用 Kotlin 代码
/**
* Created on 2022/2/17 9:36
*
* @author Kevin
*/
public class Test
public static void main(String[] args)
StringUtils.isEmpty("Kevin");
StringUtils.INSTANCE.isEmpty2("Kevin");
2. 包级别函数
与 Java 不同,Kotlin 允许函数独立存在,而不必依赖于某个类,这类函数我们称之为包级别函数(Package-Level Functions)。
为了兼容 Java,Kotlin 默认会将所有的包级别函数放在一个自动生成的叫 ExampleKt 的类中, 在 Java 中想要调用包级别函数时,需要通过这个类来调用。
当然,也是可以自定义的,你只需要通过注解 @file:JvmName(“Example”) 即可将当前文件中的所有包级别函数放到一个自动生成的名为 Example 的类中。
3. 空安全性
在 Java 中,如果你调用的 Kotlin 方法参数声明了非空类型,如果你在 Java 代码中传入一个空值,将在运行时抛出 NullPointerException。其内部原因在于 Kotlin 为每个非空类型加了断言,如果传入空值则会立刻抛出异常。
同样,如果你使用 null 对象去调用一个 kotlin 方法,将会立刻抛出 NullPointerException(就算是调用普通 java 方法也是一样会抛出 NullPointerException )
以上是关于Kevin Learn Kotlin:Java & Kotlin的主要内容,如果未能解决你的问题,请参考以下文章