Java 和 Kotlin 互调
1. 如何在 Java 中调用 Kotlin 参数类型为「函数」的函数?
来一个简单 Demo,看完一目了然。
- 首先一个名为
Kt
的 kotlin 类,有五个参数,分别传入需要五个函数:
class Kt(
private val mAction1: () -> Unit,
private val mAction2: (String) -> Unit,
private val mAction3: () -> Boolean,
private val mAction4: (String) -> Boolean,
private val mAction5: (String, Int) -> Boolean
) {
fun funcNoParam(action: () -> Unit) {
println("执行参数1:")
mAction1()
println()
println("执行参数2:")
mAction2("参数2")
println()
println("执行参数3:${mAction3()}")
println()
println("执行参数4:${mAction4("参数4")}")
println()
println("执行参数5:${mAction5("参数5", 2)}")
println()
action()
}
}
- 试着创建一个 Java 的测试类,实例化
Kt
,并调用funcNoParam()
函数:
public class JavaTest {
@Test
public void ktTest() {
Kt kt = new Kt(
new Function0<Unit>() {
@Override
public Unit invoke() {
System.out.println("我在 Java 中实现参数 1 的回调!");
return null;
}
},
new Function1<String, Unit>() {
@Override
public Unit invoke(String s) {
System.out.println("我在 Java 中实现参数 2 的回调!回调参数是:" + s);
return null;
}
},
new Function0<Boolean>() {
@Override
public Boolean invoke() {
System.out.println("我在 Java 中实现参数 3 的回调!");
return false;
}
},
new Function1<String, Boolean>() {
@Override
public Boolean invoke(String s) {
System.out.println("我在 Java 中实现参数 4 的回调!回调参数是:" + s);
return true;
}
},
new Function2<String, Integer, Boolean>() {
@Override
public Boolean invoke(String s, Integer integer) {
System.out.println("我在 Java 中实现参数 2 的回调!回调参数是:" + s + " 以及:" + integer);
return true;
}
});
kt.funcNoParam(new Function0<Unit>() {
@Override
public Unit invoke() {
System.out.println("我在 Java 中调用 funcNoParam() 函数!");
return null;
}
});
}
}
- 执行结果:
执行参数1:
我在 Java 中实现参数 1 的回调!
执行参数2:
我在 Java 中实现参数 2 的回调!回调参数是:参数2
我在 Java 中实现参数 3 的回调!
执行参数3:false
我在 Java 中实现参数 4 的回调!回调参数是:参数4
执行参数4:true
我在 Java 中实现参数 2 的回调!回调参数是:参数5 以及:2
执行参数5:true
我在 Java 中调用 funcNoParam() 函数!
以上的 Demo非常简单,也很容易理解。对于更多参数的函数,可以自行脑补,此处仅作为一个备忘录加以记录。