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的主要内容,如果未能解决你的问题,请参考以下文章

Kevin Learn Kotlin-->Kotlin 学习资料

Kevin Learn Kotlin:泛型

Kevin Learn Kotlin:Lambda 表达式

Kevin Learn Kotlin:条件控制

Kevin Learn Kotlin:函数

Kevin Learn Kotlin:委托