gpt4 book ai didi

java - 使用反射调用 java/groovy 对象的静态方法

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

我正在开发一个常规的单元测试类,其中包含一组规则,用于确定文件内容的格式是否正确。 (不使用适当的规则引擎,它只是利用 Groovy 的断言功能以类似于规则引擎的方式进行验证。)我想我可以创建一个名为 FireAllRules 的方法,如下所示:

public static void FireAllRules(File file)
{
for(def method in Class.getMethods)
{
if(method.name.indexOf("rule" == 0) method.invoke(file);
}
}

我希望循环采用的所有方法都是静态的,并且我在调试过程中注意到我的规则方法都没有包含在 Class.getMethods() 枚举中。理想情况下,我只想循环遍历我亲自编写到类中的方法,而不是对 java.Object 附带的数十个无趣的方法进行排序。有没有办法在运行时使用反射来迭代这些静态方法?

最佳答案

给定:

class Test {
public static testThis() {
println "Called testThis"
}

public static woo() {
println "Called woo"
}

public static testOther() {
println "Called testOther"
}
}

你可以这样做:

Test.metaClass.methods.grep { it.static && it.name.startsWith( 'test' ) }.each {
it.invoke( Test )
}

打印:

Called testOther
Called testThis

执行类的静态测试方法的更通用方法是:

def invokeClass( clazz ) {
clazz.metaClass.methods.grep { it.static && it.name.startsWith( 'test' ) }.each {
it.invoke( clazz )
}
}

invokeClass( Test )

关于java - 使用反射调用 java/groovy 对象的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10438039/

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