有可能改变一个实例的动态方法?

我写下了这个代码:

open class Test(){ override fun toString(): String { return "This is test!" } } fun createTestX(): Test { return object : Test() { override fun toString(): String { return super.toString() + "XXX" } } } fun main(args: Array) { val x = createTestX() println(x) } 

它按预期的方式工作,但我很好奇是否可以使用例如lambda来更改实例的方法,如下所示:

 val x = Test() x.toString = () -> x.toString() + "XXX" 

你可以做什么

 class C { var example:()->String = this::toString } fun main(args: Array) { val c = C() println(c.example()) c.example = {"ABCDEF"} println(c.example()) } 

限制

虽然这适用于交换字段,但不能用它来覆盖方法。 这可以通过定义调用该字段的方法来解决。

 class C { var example:()->String = {"ABC"} override fun toString() = example() } fun main(args: Array) { val c = C() println(c) c.example = {"DEF"} println(c) } 

输出:

 ABC DEF