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