kotlin中函数作为参数和函数作为返回值,在工作中写代码有时会被卡住,怎么写都提示语法错误,今天专门研究一下几种常用的用法。
package com.example.test
import android.util.Log
import java.util.*
class KotlinSample {
//直接定义函数
//带参数,没有返回值的函数
private var myPrint: (msg: String) -> Unit = { msg -> Log.e("xxx5",msg) }
//带参数,参数为msg,有返回值的函数类型为Strnig
private var hello : (msg: String) -> String = { "hello ${it.uppercase()}!!" }
//getIntance返回一个函数,这个函数参数为空,返回值类型为ShoppingMallFloatView
fun getInstance(context: Context): () -> ShoppingMallFloatView = {
instance ?: synchronized(this) {
instance ?: ShoppingMallFloatView(context).also {
instance = it
}
}
}
fun callMethods() {
method1 {
var hello = "hello world"
Log.e("xxx1", hello)
hello
}
method2 {
var hello = "hello world"
Log.e("xxx2", hello)
}
method3("hello world") { msg ->
Log.e("xxx3", msg)
}
//函数作为返回值
var method4 = method4("hello world")
method4.invoke()
//使用定义的函数
myPrint.invoke("hello world")
var greet = hello("zhang san")
myPrint.invoke(greet)
//参数为一个数字 加 一个函数
test(2) { a: Int, b: Int ->
var num = (a + b)*5
num
}
}
//函数作为参数,返回String 但是不需要return 直接将要返回的值放在最后一行
private fun method1(method: () -> String) {
method.invoke()
}
//函数作为参数,Unit表示没有返回值
private fun method2(method: () -> Unit) {
method.invoke()
}
//函数作为参数,有一个输入参数时。不能直接带给它,需要另外一个参数传进来。
private fun <T> method3(msg1: T, method: (msg: T) -> Unit) {
method.invoke(msg1)
}
//函数作为返回值
private fun method4(str: String): () -> Unit {
Log.e("xxx4", "这一部分不返回,直接运行")
return {
var strNew = str.uppercase(Locale.getDefault())
Log.e("xxx4", strNew)
}
}
fun test(a : Int , b : (num1 : Int , num2 : Int) -> Int) : Int{
return a + b.invoke(3,5) //8
}
}
运行结果:
2022-07-28 11:05:04.308 20589-20589/com.example.test E/xxx1: hello world
2022-07-28 11:05:04.308 20589-20589/com.example.test E/xxx2: hello world
2022-07-28 11:05:04.308 20589-20589/com.example.test E/xxx3: hello world
2022-07-28 11:05:04.308 20589-20589/com.example.test E/xxx4: 这一部分不返回,直接运行
2022-07-28 11:05:04.308 20589-20589/com.example.test E/xxx4: HELLO WORLD
2022-07-28 11:05:04.309 20589-20589/com.example.test E/xxx5: hello world
2022-07-28 11:05:04.309 20589-20589/com.example.test E/xxx5: hello ZHANG SAN!!
本文详细探讨了Kotlin中如何处理函数作为参数、返回值,包括无返回值函数、带参数函数实例,以及在实际工作中的应用场景。通过实例代码解析,帮助开发者解决函数调用中的常见问题。
5567

被折叠的 条评论
为什么被折叠?



