Kotlin是否支持更简短的单方法接口声明语法?
现有写法
目前在Kotlin中,我们可按照如下形式定义接口:
interface AnimalStrategy { fun eat(): Outcome }
期望实现
咨询问题:Kotlin中是否存在更简短的接口声明语法,可实现如下形式的接口定义?
interface AnimalStrategy = fun eat(): Outcome
回答
Kotlin 原生不支持上述等号连接的单方法接口简写语法,针对单抽象方法类型的简化需求,有两个成熟的替代方案:
- 用类型别名映射函数类型
如果你的接口仅包含一个抽象方法,完全不需要单独声明interface,直接用typealias给对应签名的函数类型起别名即可,写法比你期望的形式更精简:
这种写法下,所有符合「无参、返回值为Outcome」签名的函数、Lambda表达式都可以直接作为typealias AnimalStrategy = () -> OutcomeAnimalStrategy类型的实例使用,不需要编写匿名实现类。唯一的限制是类型别名本质是函数类型的同义词,无法为其定义专属的继承关系、成员约束,适合纯函数式的策略场景。 - 用
fun interface声明函数式接口
如果你需要保留独立接口的语义(比如要给接口增加非抽象方法、限制实现类范围),Kotlin 1.4及以上版本支持带SAM转换的函数式接口声明,兼顾接口的扩展性和使用简洁性:
声明为fun interface AnimalStrategy { fun eat(): Outcome }fun interface后,可以直接用Lambda表达式创建接口实例,不需要写冗长的object : AnimalStrategy匿名实现代码。
内容的提问来源于stack exchange,提问作者nusmanov
相关产品推荐
相关产品推荐

