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

如何实现支持Int、Long、BigInteger多上界的Kotlin泛型中缀函数divBy

错误原因

你之前使用多上界泛型的写法不符合Kotlin语法规则:where子句并列多个上界约束的语义是泛型参数T必须同时满足所有约束,而Int、Long、BigInteger是相互独立的类型,不存在任何类型可以同时继承这三个类,因此这个约束永远无法满足,编译必然失败。

实现方案

推荐使用「核心逻辑抽取+分类型重载扩展函数」的方案,既没有重复代码,也能在编译期完成类型校验,运行无额外开销:

  1. 首先抽取公共的有理数构建逻辑为私有工具方法
private fun buildRational(num: BigInteger, denom: BigInteger): Rational {
    val result = Rational(num, denom)
    result.reduce()
    println("Returning: Rational $result")
    return result
}
  1. 分别为三个目标类型声明中缀扩展函数,直接调用公共逻辑即可
infix fun Int.divBy(denom: Int) = buildRational(this.toBigInteger(), denom.toBigInteger())
infix fun Long.divBy(denom: Long) = buildRational(this.toBigInteger(), denom.toBigInteger())
infix fun BigInteger.divBy(denom: BigInteger) = buildRational(this, denom)

实现后即可正常调用所有目标场景:

  • Int 类型调用:val third = 1 divBy 3
  • Long 类型调用:val half = 2L divBy 4L
  • BigInteger 类型调用:val quarter = BigInteger.TEN divBy BigInteger.valueOf(40)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:42:02