Kotlin SAM接口函数含默认参数报错问题咨询
SAM接口带默认值参数报错问题解析
问题场景
当遵循SonarLint建议,将仅包含单个函数的接口转换为Kotlin SAM接口(使用fun interface关键字)时,若函数参数带有默认值会触发报错,示例代码如下:
fun interface HomeListener { fun setSubTitle(subtitle: String = DEFAULT_VALUE_STRING) }
原因分析
这属于Kotlin在JVM平台上的设计限制:
- SAM接口的核心要求是仅包含一个抽象成员,以此实现类似Java的SAM转换特性。
- Kotlin的函数默认值是编译期实现的特性,编译器会为带默认值的函数生成多个重载版本(比如自动生成一个不带该默认参数的重载函数)。
- 这些自动生成的重载会导致
fun interface的抽象成员数量超过一个,违反了SAM接口的定义规则,因此编译报错。
官方状态
JetBrains问题追踪器上已有对应Bug记录,自2021年起暂无更新,该问题目前尚未得到官方修复。
内容的提问来源于stack exchange,提问作者Bitwise DEVS
相关产品推荐
相关产品推荐

