gpt4 book ai didi

groovy 元类替换父类(super class)方法

转载 作者:行者123 更新时间:2023-12-04 14:48:49 24 4
gpt4 key购买 nike

有没有办法使用元类对象替换,这是一个父类(super class)的方法。
例子:

class A {
def doIt(){
two()
println 'do it!'
}
protected two(){
println 'two'
}
}

class B extends A{
def doLast(){
doIt()
}
}

B b = new B();
b.doIt()
/*
* two
* doit!
*/
b.metaClass.two = {
println 'my new two!'
}
b.doIt();
/*
* my new two!
* do it!
*/

最佳答案

由于twodoIt在同一个类中声明,groovy 将跳过此调用的元对象协议(protocol)。您可以通过将父类(super class)标记为 GroovyInterceptable 来覆盖此行为。 ,这会强制所有方法调用通过 invokeMethod .例如:

class A implements GroovyInterceptable {
def doIt(){
two()
println 'do it!'
}
protected two(){
println 'two'
}
}

class B extends A {
def doLast(){
doIt()
}
}

B b = new B()
b.doIt() // prints two
b.metaClass.two = {
println 'my new two!'
}
b.doIt() // prints my new two!

关于groovy 元类替换父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10483585/

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