相关疑难解决方法(0)

使用metaClass模拟Gradle project.exec {...}

作为测试Gradle插件的一部分,我想找出一个groovy方法:project.exec {...}.这是为了确认它正在进行正确的命令行调用.我正在尝试使用元编程:

Project proj = ProjectBuilder.builder().build()

proj.metaClass.exec = { Closure obj ->
    println 'MOCK EXEC'
}

proj.exec {
    executable 'echo'
    args 'PROJECT EXEC'
}
// prints 'PROJECT EXEC' instead of the 'MOCK EXEC' I expected
Run Code Online (Sandbox Code Playgroud)

令人好奇的是,如果我将两种exec方法重命名为othername,那么它可以正常工作:

Project proj = ProjectBuilder.builder().build()

proj.metaClass.othername = { Closure obj ->
    println 'MOCK EXEC'
}

proj.othername {
    executable 'echo'
    args 'PROJECT EXEC'
}
// prints 'MOCK EXEC' as expected
Run Code Online (Sandbox Code Playgroud)

我试图找出为什么现有project.exec方法导致元编程失败以及是否有解决方法.请注意,这Project是一个接口,但我正在嘲笑一个特定的类型实例DefaultProject.

用于删除单个方法的元编程方法来自这个答案:https: …

groovy gradle

5
推荐指数
1
解决办法
1040
查看次数

在Groovy中找出方法的名称

在Groovy中有没有办法找出被调用方法的名称?

def myMethod() {
    println "This method is called method " + methodName
}
Run Code Online (Sandbox Code Playgroud)

这与鸭子打字相结合将允许非常简洁(并且可能难以阅读)的代码.

reflection groovy introspection

4
推荐指数
1
解决办法
3871
查看次数

标签 统计

groovy ×2

gradle ×1

introspection ×1

reflection ×1