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

Kotlin扩展String类方法无法在Lambda中使用的问题求助

问题分析与解决

核心问题

你定义的扩展函数写法错误,导致方法引用类型不匹配:

  • 原本想写String的扩展函数,但额外添加了一个String参数s,让函数变成了需要两个String参数(扩展接收者+传入参数)的KFunction2<String,String,String>;
  • 而map操作需要的是单参数函数(String) -> String,因此出现类型不兼容错误。

修正后的扩展函数

去掉多余的参数,直接利用扩展函数的接收者this(即调用该方法的String对象),同时修正正则表达式的错误(原[^a-ZA-Z0-9]中a-Z会包含非字母符号,应改为a-zA-Z):

fun String.removeNonAlphanumeric() = this.replace("[^a-zA-Z0-9]".toRegex(), "")

修正后的调用代码

现在方法引用String::removeNonAlphanumeric会被识别为(String) -> String,可以直接在map中使用:

s.split("\\s+".toRegex())
    .map(String::removeNonAlphanumeric)
    .toList()

为什么标准库方法可以直接引用

像Strings.kt里的标准库扩展函数(比如String.trim()),都是无额外参数的扩展函数,它们的方法引用String::trim正好是map需要的(String) -> String类型,因此可以直接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:35:23