Kotlin中Int扩展函数无法调用问题及概念咨询
为什么无法调用SomethingUtil中的Int扩展函数?
你写的第一个函数是Int类型的扩展函数,不是SomethingUtil的普通成员函数,这就是你不能用SomethingUtil.something调用它的原因。
扩展函数的本质
扩展函数是Kotlin用来给现有类(比如这里的Int)添加新方法的特性,它不属于定义它的那个对象(SomethingUtil),而是依附于被扩展的类(Int)。所以调用它的正确姿势是以Int类型的实例作为调用主体,而不是通过定义它的对象去调用。
正确调用方式
比如:
// 用Int变量调用 val myInt = 10 val result = myInt.something(20) // 直接用Int字面量调用 val anotherResult = 5.something(15)
如果要获取这个扩展函数的引用,也不能用SomethingUtil::something,得写成Int::something,比如:
val funcRef: (Int, Int) -> Int = Int::something val result = funcRef(3, 7) // 等价于3.something(7)
和普通成员函数的区别
你第二个定义的是SomethingUtil的普通成员函数,它属于这个对象本身,所以可以直接通过SomethingUtil.something调用或者获取函数引用。但扩展函数的“归属”是被扩展的类,哪怕你把它定义在某个对象里,也改变不了这一点——那个对象只是它的作用域容器,决定了哪里能访问到这个扩展函数,而不是它的调用入口。
内容的提问来源于stack exchange,提问作者JS King
相关产品推荐
相关产品推荐

