目录
一、函数作为形参传入函数
需求:写一个方法名为“show”的函数,有两个入参,参数1是个boolean类型,参数2是一个回调函数,返回一个String类型的值
首先咱们先看下不用高阶怎么实现:
第一步:定义一个回调接口函数
interface KtCallback { fun show(info: String): String }
第二步:写出此函数
/** * 普通函数 接口回调的形式 */ fun show(isShow: Boolean, callback: KtCallback) { if (isShow) { val result = callback.show("普通 show") println("普通函数返回结果:$result") } }
第三步:外界调用
//普通函数调用 show(true, object : KtCallback { override fun show(info: String): String { println(info) return "普通 ok" } })
下面用高阶函数来实现这个需求
第一步:直接写出此函数
/** * 高阶函数 函数作为形参传入函数 */ fun show(isShow: Boolean, callback: (String) -> String) { if (isShow) { val result = callback("高阶 show") println("高阶函数返回结果:$result") } }
第二步:外界调用,三种写法均可
//高阶写法一 show(true, callback = { println(it) "高阶 OK" }) //高阶写法二 show(true, { println(it) "高阶 OK" }) //高阶写法三 show(true) { println(it) "高阶 OK" }
二、自定义扩展函数
示例一、给特定对象添加扩展函数
第一步:新建一个ComonUtils.kt 文件,注意是文件,里面不要定义class
第二步:在文件中编写函数
fun Context.toast(content: String) { Toast.makeText(this, content, Toast.LENGTH_LONG).show() }
第三步:在任何可以拿到Context的地方都可以直接调用此函数,比如在Activity中可以直接这样写
this.toast("扩展函数") 或 toast("扩展函数")
示例二、借助泛型给所有对象统一添加扩展函数
第一步:在ComonUtils.kt文件中这样定义一个函数
fun <T> T.log(content: String) { LogUtil.i(content) }
第二步:我们在任意一个类中都可以直接调用log方法
log("所有对象都有的扩展函数")