我写下了这段代码:
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"
答案 0 :(得分:4)
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