类型的理解
class User {
val a:Int = 0
val b:String = ""
lateinit var c:(Int,Int)->Int //将变量定义为函数类型 参数类型是 Int,Int 返回值是Int
}
1、kotlin 中有 类型 如 Int 、String 和java的区别是,一个函数也可以当做类型(像Int,String一样), 那么 我们可以定义一个变量是函数类型的,比如上面的 c
lateinit var c:(Int,Int)->Int
这个变量 的类型是 (Int,Int)-> Int 这个变量接收两个Int类型的参数返回值是Int
因为这个c 只是声明了,没有具体的实现(也可以认为它没有赋值) 我们可以把它当作 java中的抽象方法(这样讲也不太准确)
1.1 如何使用这个函数
var user = User()
//下面这个语句是在给 c 这个变量(是函数类型的)赋值
user.c = {
num1,num2->
num1*num2
}
var c = user.c(20, 30)
println(c)
1.2 类型是函数的有实现的变量
class User {
val d:(Int,Int)->Int={
num1,num2->
num1*num2
}
上面是定义了类型是函数类型的常量 d (因为被val修饰 ide 不允许我们再重新定义它的实现逻辑了)
我在调用处理重新定义逻辑后 ide会报错
image.png
image.png
2、高阶函数
/**
* 我们思考一个问题 高阶函数 参数是 函数类型的 参数 如果也有参数(因为这个参数也是一个方法)如何传值 为什么没有办法直接传值,而还依赖于这个高阶函数呢
*/
fun topMethod(num1:Int,num2:Int,method:(Int,Int)->Int): Int {
return method(num1,num2)
}
2.1使用
fun main() {
var user = User()
val result = user.topMethod(30, 25) { num1, num2 ->
num1 * num2
}
println(result)
}
参考:
https://zhuanlan.zhihu.com/p/495402574
我的疑问和总结:
fun highMethod1(func:(Int,Int)->Int): Int {
//这种高阶函数的做用是什么
//通地计算把这两个参数的值传过去 (下面传的 20和 30 是通过我通过逻辑(我们可以根据自己的业务)计算给的 20和 30 这两个值)
return func(20,30);
}
使用
Three().highMethod1 { i, i2 ->
println("i的值是:$i,i2的值是:$i2")
i*i2 //方法的定义已经确定了是否有返回值
}
网友评论