Kotlin函数类型的实例化

三种函数格式

1,函数字面值

1.1,Lambda

1.2,匿名函数

2,反射引用普通函数

3,实现函数类型接口的类

 

首先定义一个需要函数作为参数的函数

fun myFunIns(data:Int, myFun:(arg:Int)->Int):Int{

    return myFun(data)

}

注意其中定义的函数类型是 (arg:Int)->Int ,也即参数是一个Int,返回一个Int

 

这是第一种格式,即函数字面值的Lambda表示法

    var result1 = myFunIns(123, {

        it * 2

    })

上面利用 it 做了简化。也可以将 lambda 抽取出来,此刻无法使用 it 简化:

    var result1 = myFunIns(123, {

        data ->

        data * 2

    })

 

第二种格式,是函数字面值的匿名函数

    var result2 = myFunIns(123, fun(data:Int):Int{

        return data * 3

    })

同样,匿名函数可以抽取出来

    val result2_fun = fun(data:Int):Int{ //We can extract it out

        return data * 3

    }

 

第三种是反射引用格式

    fun myFun(data:Int):Int{

        return data * 4

    }

    val result3 = myFunIns(123, ::myFun)

 

第四种是偶然看到的,通过一个类实现一个接口,该接口有一个函数。

    class MyFun:(Int)->Int{

        override operator fun invoke(data:Int):Int{

            return data * 5

        }

    }

    val result4 = myFunIns(123, MyFun())

 

比较绕,尚不知何种情况使用

 

实践代码:https://gist.github.com/maxyou/6527b0f2019704ce7ae257d5cb17791b

 

你可能感兴趣的:(Kotlin)