Kotlin重载函数调用Math.pow时提示Int与Double类型不匹配
Kotlin 重载函数类型不匹配报错解决
报错根因
你调用的Math.pow是Java标准库提供的数学计算API,这个方法的签名明确要求两个入参都必须是Double类型。
Kotlin不支持基础数值类型的隐式自动转换:哪怕Int转Double是无精度损失的宽化转换,编译器也不会自动完成类型适配,直接把Int值传入要求Double的参数位,就会抛出你看到的Type mismatch: inferred type is Int but Double was expected报错。
你之前实现Int入参、Double返回值的功能没有触发同类报错,是因为当时的逻辑里没有强制要求Double类型的参数位,不会触发这个类型校验。
修复方案
只需要在Int参数的getArea重载方法中,把传入Math.pow的参数显式转换为Double即可,修复后的完整代码如下:
fun main(args: Array<String>) { val radius = 13 println(getArea(radius)) } fun getArea(radius: Double): Double { val area = Math.pow(radius, radius) * Math.PI return area } fun getArea(radius: Int): Double { // 显式将Int类型的radius转为Double后传入pow方法 val area = Math.pow(radius.toDouble(), radius.toDouble()) * Math.PI return area }
可选优化
如果不想重复编写计算逻辑,可以让Int版本的重载直接调用Double版本的实现,后续调整面积计算规则时只需要修改一处代码:
fun getArea(radius: Int): Double { return getArea(radius.toDouble()) }
内容的提问来源于stack exchange,提问作者ChudNelson
相关产品推荐
相关产品推荐

