gpt4 book ai didi

java - 根据条件选择重载函数

转载 作者:行者123 更新时间:2023-11-30 06:45:22 25 4
gpt4 key购买 nike

我在 Groovy 中有一个根据条件调用的重载方法:

Boolean isUnix = getIsUnix()
Map result
if (isUnix) {
result = TestAbstract.execute(className, "JAVA_OPTS=/dev/urandom")
} else {
result = TestAbstract.execute(className)
}

是否有更好的方法来达到同样的效果?像这样的东西:

TestAbstract.execute(className, isUnix ? "additionalParam" : ) 

请注意,我想要以下内容:

TestAbstract.execute(className, isUnix ? "additionalParam" : "") //this is bad

因为它覆盖了字符串的可能默认值。我想有条件地调用一个方法的两个重载变体:

如果为真,则调用该方法的第一个变体并传递参数AB;否则,调用该方法的第二个变体并仅传递参数 A

有没有更简洁的方案?

最佳答案

您可以尝试使用 GroovyObject.invokeMethod(methodName, args)如果您喜欢使用动态和元 Groovy 功能​​,请使用元编程方法。它允许您定义一个单独的地方,您可以在其中调用方法并预先定义参数列表。考虑以下示例:

class TestAbstract {
static void execute(String className, String params = "defaults") {
println "Executing with className = '${className}' and params = '${params}'"
}
}

def runTest(boolean isUnix) {
def params = ['MyClassName']

if (isUnix) {
params << 'additionalParam'
}

TestAbstract.invokeMethod('execute', params as Object[])
}

runTest(true)
runTest(false)

在此示例中,TestAbstract.execute(className, params) 使用第二个方法参数的默认值。 GroovyObject.invokeMethod(className, args) 期望第二个参数是参数数组,因此我们可以根据需要传递单个元素数组或双元素数组。

运行此示例会产生以下输出:

Executing with className = 'MyClassName' and params = 'additionalParam'
Executing with className = 'MyClassName' and params = 'defaults'

即使您可以以元/动态方式进行操作,我还是要说:

isUnix ? TestAbstract.execute(className, additionalParam) : TestAbstract.execute(className)

对我来说更具可读性。希望对您有所帮助。

关于java - 根据条件选择重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49106125/

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