Kotlin中如何匿名实现函数式接口?是否必须创建实现类?
Kotlin中实现单方法接口的方式
你已经定义了Kotlin版的Filter单方法接口:
@FunctionalInterface public interface Filter { fun apply(query: Query): Query }
不需要创建单独的实现类,Kotlin提供了多种简洁的实现方式:
1. SAM转换(Lambda表达式)
因为你的接口标注了@FunctionalInterface,Kotlin支持SAM(Single Abstract Method)转换,可直接用lambda表达式实现,写法比Java更简洁:
class FlagFilterFactory { fun create(searchQuery: SearchQuery): Filter { // 显式指定接口类型的lambda写法 return Filter { q -> q.addCriteria(...) q } // 也可省略Filter关键字,Kotlin会自动推断类型 // return { q -> // q.addCriteria(...) // q // } } }
2. 匿名内部类写法
如果需要更明确的实现逻辑,也可以使用传统的匿名内部类方式:
class FlagFilterFactory { fun create(searchQuery: SearchQuery): Filter { return object : Filter { override fun apply(query: Query): Query { query.addCriteria(...) return query } } } }
额外优化:用函数类型替代接口
如果这个接口仅用于封装Query -> Query的函数逻辑,在Kotlin中可以直接用函数类型替代接口,更贴合函数式编程风格:
// 用typealias定义函数类型代替Filter接口 typealias Filter = (Query) -> Query // Factory类直接返回lambda即可 class FlagFilterFactory { fun create(searchQuery: SearchQuery): Filter { return { q -> q.addCriteria(...) q } } }
内容的提问来源于stack exchange,提问作者NeverSleeps
相关产品推荐
相关产品推荐

