Java 和 Kotlin 互调

Java 和 Kotlin 互调

1. 如何在 Java 中调用 Kotlin 参数类型为「函数」的函数?

来一个简单 Demo,看完一目了然。

  1. 首先一个名为 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()
    }
}
  1. 试着创建一个 Java 的测试类,实例化 Kt ,并调用 funcNoParam() 函数:
public class JavaTest {
    @Test
    public void ktTest() {
        Kt kt = new Kt(
                new Function0() {
                    @Override
                    public Unit invoke() {
                        System.out.println("我在 Java 中实现参数 1 的回调!");
                        return null;
                    }
                },
                new Function1() {
                    @Override
                    public Unit invoke(String s) {
                        System.out.println("我在 Java 中实现参数 2 的回调!回调参数是:" + s);
                        return null;
                    }
                },
                new Function0() {
                    @Override
                    public Boolean invoke() {
                        System.out.println("我在 Java 中实现参数 3 的回调!");
                        return false;
                    }
                },
                new Function1() {
                    @Override
                    public Boolean invoke(String s) {
                        System.out.println("我在 Java 中实现参数 4 的回调!回调参数是:" + s);
                        return true;
                    }
                },
                new Function2() {
                    @Override
                    public Boolean invoke(String s, Integer integer) {
                        System.out.println("我在 Java 中实现参数 2 的回调!回调参数是:" + s + " 以及:" + integer);
                        return true;
                    }
                });
        
        kt.funcNoParam(new Function0() {
            @Override
            public Unit invoke() {
                System.out.println("我在 Java 中调用 funcNoParam() 函数!");
                return null;
            }
        });
    }
}
  1. 执行结果:
执行参数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非常简单,也很容易理解。对于更多参数的函数,可以自行脑补,此处仅作为一个备忘录加以记录。

你可能感兴趣的:(Java 和 Kotlin 互调)