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

Kotlin两种带类型约束的方法有何区别?该如何选择?

两种泛型约束写法的区别与选择

这两个函数在单个类型约束场景下功能完全等价——都要求泛型参数T实现CharSequence接口,调用时的行为没有任何差异。

核心区别体现在适用场景上:

  • <T : CharSequence>是单个约束的简洁写法,只能给泛型参数加一个上界约束,适合简单场景。
  • where T : CharSequence是为多约束场景设计的标准写法,当你需要给同一个泛型参数添加多个约束时,必须用where子句。比如要让T同时实现CharSequence和Serializable:
    fun <T> onLogThird(line: T) where T : CharSequence, T : Serializable {
        // 函数逻辑
    }
    

另外提个小细节:你的Logger类本身声明了泛型<T>,但这两个函数的泛型T是独立的函数级泛型,和类泛型没关系。如果想复用类的泛型约束,得去掉函数的泛型声明,比如:

class Logger<T : CharSequence> {
    fun onLog(line: T) {
        // 直接使用类的泛型T
    }
}

总结:单个约束时两种写法随便选,简洁写法更常用;多约束场景必须用where子句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:12:04