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<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. 执行结果:
执行参数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非常简单,也很容易理解。对于更多参数的函数,可以自行脑补,此处仅作为一个备忘录加以记录。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容