美文网首页
Java 和 Kotlin 互调

Java 和 Kotlin 互调

作者: ChenME | 来源:发表于2020-06-22 08:44 被阅读0次

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

    相关文章

      网友评论

          本文标题:Java 和 Kotlin 互调

          本文链接:https://www.haomeiwen.com/subject/focptktx.html