如何在Java中将函数传递给方法参数

时间:2019-01-11 05:38:21

标签: java

APIResponse res = kpiAPIObject.getALLKPIDefinition(); ->功能

布尔值状态= res.getNodeValues(“ shortName”)。contains(kpiName); ->函数b

public void dynamicWait(function a,function b)
{
    long t = System.currentTimeMillis();
    while (t > System.currentTimeMillis() - 180000 ) {
        res = /* execute function a here */
        if(/* execute function b here */) {
            break;
        } else {
            Thread.sleep(30000);
            continue;
        }
    }  
}

预先感谢

2 个答案:

答案 0 :(得分:3)

听起来像您可以使用一些lambda:

Supplier<APIResponse> a = kpiAPIObject::getALLKPIDefinition;
Predicate<APIResponse> b = res -> res.getNodeValues("shortName").contains(kpiName);

然后像这样称呼他们

APIResponse res = a.get();
if (b.test(res)) {
    break;
}

答案 1 :(得分:3)

在Java中,有多种方法。如果您查看java.util.function软件包,您将看到

  • 功能:接受一个参数,产生一个结果
  • 消费者:接受一个论点,什么也没产生。
  • BiConsumer:接受两个参数,不产生任何结果。
  • 供应商:不带参数,产生一个结果。
  • 谓词:一个参数的布尔值函数

您可以将它们用作方法的输入并在其中执行。

在这种情况下,您将对功能a使用供应商,对功能b使用谓词。

Supplier<APIResponse> a = () -> { return kpiAPIObject.getALLKPIDefinition(); }; Predicate<APIResponse> b = res -> res.getNodeValues("shortName").contains(kpiName);

public void dynamicWait(Supplier<APIResponse> a,Predicate<APIResponse> b)

{

long t = System.currentTimeMillis();

while (t > System.currentTimeMillis() - 180000 ){

            res = a.get();
            if(b.test(res)){
                break;
            }
            else{
                Thread.sleep(30000);
                continue;
            }
        }  

}