这种方法在Kotlin中被称为“函数式编程”的特性之一。当我们想要将对象作为函数调用时,我们需要定义一个包含invoke方法的对象。这个方法可以通过使用()运算符来调用,就像调用普通函数一样。 invoke方法在Kotlin中有很多用途。它可以用于简化代码,提高代码可读性,以及在需要传递函数作为参数的高阶函数中方便地使用对象。
而invoke 变量是作为参数传递给 exec 函数的,如果 exec 函数为空,那么 inkoke 具体实现的 show 方法也不会被调用的,在 exec 中调用 invoke 的方法如下: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 funexec(invoke:ReceiveObject.()->Int){val receObj=ReceiveObject()// 两种调用形式// 类似于 Rec...
override fun invoke(p1: Int) { Logger.d("$p1") } } testInvoke.setSingleListener(function1) 这里看起来合情合理,因为在testRun函数中我们调用了invoke函数,把100当做参数,然后这个100会被回调到function1中,但是我们传递lambda时呢: val testInvoke = TestInvoke() testInvoke.setSingleListener { returnInt...
val multiplyBy2 = { i: Int -> i * 2 } //复合函数 infix fun <P1, P2, R> Function1<P1, P2>.andThen(function: Function1<P2, R>): Function1<P1, R> { return fun(p1: P1): R { return function.invoke(this.invoke(p1)) } } fun main(args: Array<String>) { //(5+8)*2 v...
和上面的get约定一样,[] 就是调用 get 方法的更简洁的方式,这里有个invoke约定,它的作用就是让对象像函数一样调用方法,下面直接来个例子: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 dataclassTestBean(val name:String,val age:Int){//重载定义invoke方法operator funinvoke():String{return"$name ...
add(listener)} fun removeListener(listener: () -> Unit) { listeners.remove(listener)} fun notifyListeners() { for (listener in listeners) { listener.invoke()} } } // 创建事件总线实例 val eventBus = EventBus()// 添加事件监听器 eventBus.addListener { println("事件1已触发!")} event...
Kotlin基础知识_08-高阶函数&内联函数&inline&noinline&crossinline 1. 高阶函数 kotlin中的高阶函数允许传入的函数体来决定函数的执行结果。当需要调用一个高阶函数时,调用方式分为两种: 使用函数引用的方式去调用; 使用Lambda表达式的方式去调用; 1.1 使用函数引用的方式去调用 ...
it.invokeOnCancellation {...} 函数非常关键 ,它的相关特性如下: 1. 协程被取消回调 ,这里适合做一些资源回收、任务取消等相关工作. 例如 取消网络 等等 2. it.resume 或 it.resumeWithException 执行完毕后, 即使协程被取消,该回调将不会再执行
1.表达式函数体 通过下面这个简单的例子看下函数声明相关的概念,函数声明的关键字是fun,嗯,比JS的function还简单。 Kotlin中参数类型是放在变量:后面,函数返回类型也是。 fun max(a: Int, b: Int) : Int { if (a > b) { return a } else { ...
除了Function1,Kotlin还内置了Function2、Function3、Function4等等,分别代表了2、3、4个参数的函数类型。就是这么简单粗暴。 回到上面的反编译代码中,我们发现letMy函数,传入user对象和TestKt$test$letResult$1.INSTANCE这个单例对象,并且在执行的时候,是用单例对象调用invoke函数,然后将user传进去的。在TestKt$test...