Kotlin出现Overload resolution ambiguity重载解析歧义错误如何修复
报错原因
该重载歧义错误是因为Kotlin标准库中存在多个名为sum的公共函数,直接通过::sum获取函数引用时,编译器无法区分你要引用的是自定义的双参数Double类型sum函数,还是标准库中的其他sum重载。
解决方案
有两种常用的修复方式:
方案1:显式声明变量的函数类型
直接指定fn的类型为(Double, Double) -> Double,编译器就会自动匹配到符合该类型签名的自定义sum函数,代码修改如下:
fun main(args:Array<String>) { println(sum(2.0,3.0)) println(power(2.0,3.0)) // 显式指定fn的函数类型 var fn: (Double, Double) -> Double = ::sum } fun sum(a:Double, b:Double):Double{ return a+b } fun power(a:Double, b:Double):Double{ return a.pow(b) }
方案2:通过包名明确指定自定义sum的来源
如果你的代码声明了包名(比如包名为com.demo),可以在函数引用前加上包名,明确指定引用的是自定义的sum函数,示例:
package com.demo fun main(args:Array<String>) { println(sum(2.0,3.0)) println(power(2.0,3.0)) // 加包名明确引用来源 var fn = com.demo::sum } fun sum(a:Double, b:Double):Double{ return a+b } fun power(a:Double, b:Double):Double{ return a.pow(b) }
内容的提问来源于stack exchange,提问作者Aditya Vyas-Lakhan
相关产品推荐
相关产品推荐

