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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:03:15