PHP
·
发表于 5年以前
·
阅读量:8286
kotlin 的把函数作为一个对象来使用,这样极大的扩展了代码了灵活度,很多时候减少了我们不少代码量,但是也增加了学习难度。这里我们来用一个对象函数来替代一个 lisenter 接口
open class Book(var name: String) : Cat(), Foo {
// 没有返回值用 Unit
lateinit var getData: (name: String, age: Int) -> String
fun String.aact(str: String): String {
return name.aact(name)
}
class MainActivity<T : String> : AppCompatActivity() {
// 方法一:传递一个声明相同的方法,类似于实现接口方法
book1.getData = this@MainActivity::getData
fun getData(name: String,age:Int): String {
return "5555"
}
// 方法二:实现匿名方法,先把参数再声明一下,后面具体实现逻辑即可
book1.getData = { name: String, age: Int ->
text_name.toString()
}
}
// 在 class 外声明,作用域和平常类一样
typealias Click = (String, String) -> Int
class BookData(map: MutableMap<String, Any>) {
fun my(click: Click) {
click("GG", "AA")
}
fun test2() {
// typealias 填参数时和函数式对象一样
my { name, age ->
Log.d("AA", "my 方法参数传入")
return@my 10
}
}
}