kotlin在课堂授权中调用一个变异函数
我是Kotlin新手,我不知道如何解释,但这个例子应该足够了
interface Walker{ var position:Pair<Int,Int> fun walk(to:Pair<Int,Int>){ position = to; } fun trip() } class People(override var position: Pair<Int, Int>):Walker{ override fun trip() { Log.v("TP","Ouch!!") } } class Superman(override var position: Pair<Int, Int>): Walker by People(position){ }
当我打电话
val sm = Superman(Pair(0,0)) sm.walk(Pair(2,2)) Log.v("TP","${sm.position}" //It give (0,0) instead of (2,2)
有没有一种可能的方式来解决这个问题,同时仍然使用委托
更改
class Superman(override var position: Pair<Int, Int>): Walker by People(position)
至
class Superman(position: Pair<Int, Int>): Walker by People(position)
这样,您只需将position
的初始值传递给委托,而不是再次覆盖position
,即可取代最初委派给Person
。