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()
我正在尝试制作一个很好的类 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()