gpt4 book ai didi

kotlin - 是否可以动态更改实例的方法?

转载 作者:行者123 更新时间:2023-12-02 13:09:28 24 4
gpt4 key购买 nike

我写下了这段代码:

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<String>) {
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<String>) {
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<String>) {
val c = C()
println(c)
c.example = {"DEF"}
println(c)
}

输出:
ABC
DEF

关于kotlin - 是否可以动态更改实例的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48382270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com