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

Does Kotlin permit extension methods on lambdas?

我正在尝试制作一个很好的类 SAM API 来实例化抽象 类,因为我不喜欢对象表达式。我正在尝试做类似的事情:

{my lambda code here}.my_extension_function()

Kotlin 可以吗?

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

// 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上调用扩展函数并且在它之前有一个函数调用你需要添加分号 在函数调用之后,例如:

someFunction();

{
    //...
}.my_extension_function()