由于我不喜欢对象表达式,因此我试图为实例化抽象类创建一个类似于SAM的API。我正在尝试做类似的事情:
{my lambda code here}.my_extension_function()
科特林有可能吗?
答案 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()