Kotlin 与 Java 相互调用
Posted Lucky_William
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 与 Java 相互调用相关的知识,希望对你有一定的参考价值。
目录
一、Kotlin 调用 Java
1. kotlin 关键字转义
java 中的方法或变量 是 kotlin 的关键字时,使用反引号 `` 对关键字进行转义
// java
public class JavaDemo
String is;
public String getIs()
return is;
public void setIs(String is)
this.is = is;
public void in()
System.out.println("call java method in");
public void multiParams(int... params)
System.out.println(Arrays.toString(params));
// kotlin
fun main()
// 1. java 中的方法或变量 是kotlin 的关键字时,使用反引号 `` 对关键字进行转义
val demo = JavaDemo()
// 调用 java 的 is 属性,is 是 kotlin 的关键字,使用反引号转义
demo.`is` = "call java field"
println(demo.`is`) // call java field
// 调用 java 的 in 方法,in 是 kotlin 的关键字,使用反引号转义
demo.`in`() // call java method in
2. kotlin 可将数组传给 java 的可变数量参数
// kotlin
// 使用 * 号将 kotlin 的 数组 传给 java 的 可变数量参数
fun main()
val arrayInt = intArrayOf(1, 2, 3)
demo.multiParams(*arrayInt) // [1, 2, 3]
3. kotlin 获取对象的 java 类
// kotlin
fun main()
demo::class.java
demo.javaClass
二、Java 调用 Kotlin
1. java 调用 kotlin 类的属性和方法
// kotlin
class KotlinDemo
var field: String = "kotlin field"
fun method()
println("call kotlin method")
// java
public static void main(String[] args)
KotlinDemo demo = new KotlinDemo();
System.out.println(demo.getField()); // kotlin field
demo.method(); // call kotlin method
2. java 调用 kotlin 的顶级属性和顶级函数
// kotlin
val topLevelField: Int
get()
println("call kotlin top level field")
return 1
fun topLevelFunc()
println("call kotlin top level function")
// java
public static void main(String[] args)
TestCallEachOtherKt.getTopLevelField(); // call kotlin top level field
TestCallEachOtherKt.topLevelFunc(); // call kotlin top level function
3. java 调用生成指定类名的 kotlin 属性和函数
// kotlin
// 指定文件生成的 Java 类或方法的名称。
@file:JvmName("CallKtDemo")
package com.william.testkt
var field: Int = 100
fun method()
println("call CallKtDemo method")
// java
public static void main(String[] args)
System.out.println(CallKtDemo.getField());
CallKtDemo.method();
4. java 调用 kotlin 的伴生对象的方法和静态方法
// kotlin
class TestCallKotlin
companion object
// 模拟静态方法
fun method1()
println("call method1")
// 静态方法
@JvmStatic
fun method2()
println("call method2")
// java
public static void main(String[] args)
TestCallKotlin.Companion.method1();
TestCallKotlin.method2();
5. java 调用 kotlin 单例类的方法
// kotlin
object KotlinObject
fun method1()
println("call method1")
@JvmStatic
fun method2()
println("call method2")
// java
public static void main(String[] args)
KotlinObject.INSTANCE.method1();
KotlinObject.method2();
6. java 调用 kotlin 含有 lambda 表达式参数的方法
// kotlin
object KotlinObject
// 参数为 lambda 表达式,入参为 Int,返回值为 Unit
@JvmStatic
fun method3(param: (Int) -> Unit = )
param.invoke(101)
// 参数为 lambda 表达式,入参为 Boolean,返回值为 String
@JvmStatic
fun method4(param: (Boolean) -> String = "" )
param.invoke(true)
// java
public static void main(String[] args)
KotlinObject.method3(new Function1<Integer, Unit>()
@Override
public Unit invoke(Integer integer)
System.out.println(integer);
return null;
);
KotlinObject.method4(new Function1<Boolean, String>()
@Override
public String invoke(Boolean param)
System.out.println("invoke param: " + param);
return param ? "success" : "failed";
);
附 Github 源码:
以上是关于Kotlin 与 Java 相互调用的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin集合操作 ④ ( Set 集合 | 可变 Set 集合 | List 与 Set 之间相互转换 | 数组类型 )
Kotlin集合操作 ④ ( Set 集合 | 可变 Set 集合 | List 与 Set 之间相互转换 | 数组类型 )
KotlinKotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问私有属性 | Java 调用 Kotlin 函数 )