采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
您好老师,请问下下面代码B方法里的this为什么会是"car",是因为A方法在调用B方法的时候会自动转成 “car”.B()吗?
不清楚原因看不到你的回复哈(可能是平台要审核)。
这个问题的关键之处在于同学要理解一下扩展函数的 receiver。这里调用B的时候 receiver 应该是一个 String,它是怎么提供给 B的呢?
你觉得应该是什么
this肯定是String,但至于为啥是"car"就有点懵圈,如果是直接调用"car".B( ),那this就是"car",这好理解; 但现在是调用"car".A( ), 这个"car"是怎么从A方法传递到B方法的; 主要是对比java的写法产生迷惑,下面的java写法中容易理解this就是car, 可能是A方法和B方法都是属于car实例对象的,都在car实例的上下文范围内,所以好理解; 但在Kotlin中 扩展函数A 和 B是独立分开的,不属于"car" 同个上下文范围内, 那这里调用"car". A( ) ,B()为什么能得到它的this就是“car” class Car{ publlic void A(){ B(); } publlic void B(){ println(this) //当main方法里调用car.A(),这里的this就是car,这好理解 } public static void main(args[] String){ Car car = new Car(); car.A(); } }
登录后可查看更多问答,登录/注册
如果有一门语言可以取代Java,那么它一定是Kotlin。
1.5k 4
1.6k 1
429 1
270 20
1.4k 16