You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin如何将类内扩展方法转换为带接收者的lambda表达式?

解答

存在对应的语法糖,你可以直接通过带分发接收者的成员引用语法完成赋值,不需要额外包装lambda:

class SomeClass{
  val logger = ...
  fun (String).capitalizeLast():String {
    logger.info("capitalizeLast called")
    return this.substring(0,this.length-1) + this.substring(this.length-1,this.length).toUpperCase()
  }
  // 直接通过this::引用类内部的成员扩展函数
  val asLambda: (String).()->String = this::capitalizeLast
}

说明

你定义的capitalizeLast属于类内成员扩展函数,这类函数同时存在两个接收者:

  • 扩展接收者:就是扩展函数的操作对象String实例
  • 分发接收者:就是扩展函数所属的外部类SomeClass实例
    因此引用这类函数时,需要在::前加上分发接收者的实例(这里就是当前类的实例this),就可以直接得到符合(String)->String类型的带接收者函数实例。

如果该扩展函数是定义在顶层(不在任何类内部),直接用::capitalizeLast引用即可,不需要加前缀。

内容的提问来源于stack exchange,提问作者caeus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:54:08