Kotlin是否允许在lambda上使用扩展方法?

时间:2018-12-29 18:44:10

标签: kotlin kotlin-extension

由于我不喜欢对象表达式,因此我试图为实例化抽象类创建一个类似于SAM的API。我正在尝试做类似的事情:

{my lambda code here}.my_extension_function()

科特林有可能吗?

1 个答案:

答案 0 :(得分:2)

是的,有可能。示例代码为:

// extension function on lambda with generic parameter
fun <T> ((T) -> Unit).my_extension_function() {
    // ...
}

// extension function on lambda without generic parameter
fun (() -> Unit).my_extension_function() {
    // ...
}

并使用它,例如:

// lambda variable with generic parameter
val lambda: (Int) -> Unit = {
    // 'it' contains Int value
    //...
}

// lambda variable without generic parameter
val lambda: () -> Unit = {
    //...
}

lambda.my_extension_function()

// also we can call extension function on lambda without generic parameter like this
{
    //...
}.my_extension_function()

// or with generic parameter
{ i: Int ->
        //...
}.my_extension_function()

注意:如果您在lambda上调用扩展函数而未创建变量,并且之前有函数调用,则需要在函数调用后添加分号,例如:< / p>

someFunction();

{
    //...
}.my_extension_function()