gpt4 book ai didi

java - 如何使用 lambda 表达式将条件发送到方法以便尚未对其进行评估?

转载 作者:搜寻专家 更新时间:2023-11-01 02:04:48 24 4
gpt4 key购买 nike

我正在尝试发送条件语句(尚未评估)作为方法的参数。我知道在 java8 中,lambda 表达式 是执行此操作的方法(有效地将条件放入函数中,并发送函数)。

// simple method inside a utilities class 
// that does assertions if global debug parameter is true

public class MyUtils
{
public static void do_assertions( boolean argb , String args )
{
if( BuildConfig.pvb_debuggable )
{ assert argb , args ;
}
}
}

// somewhere within app where a development-phase assertion is needed

public class some_class
{
public void some_method( )
{
EditText lvo_editText = (EditText) findViewById( "the_id" ) ;

//assert lvo_editText != null;
// ... replace this with a call to do_assertions
MyUtils.do_assertions( () -> { lvo_editText != null ; } , "bad EditText" );
}
}

我已经尝试过此设置的多种变体。我每次都会遇到不同的错误:)

最佳答案

您快到了,您可以更改签名以接收 BooleanSupplier只有在调用 getAsBoolean 时才会计算条件。

这里有一个简单的例子:

public class Test {

public static void main(String args[]) {
A a = new A();
test(() -> a != null && a.get());
}

static void test(BooleanSupplier condition) {
condition.getAsBoolean();
}

static class A {
boolean get(){
return true;
}
}
}

如果您在 Debug模式下查看此示例,您会看到条件 a != null && a.get() 仅在 condition.getAsBoolean() 被执行。

将此应用于您的示例,您只需要更改

void do_assertions( boolean argb , String args )

对于

void do_assertions(BooleanSupplier argo_supplier , String args )

然后调用 argo_supplier.getAsBoolean() 以评估条件(在检查 pvb_debuggable 之后)。

然后你的线

MyUtils.do_assertions( () -> lvo_editText != null  , "bad EditText" );

会正确编译(注意我删除了不必要的括号)。

关于java - 如何使用 lambda 表达式将条件发送到方法以便尚未对其进行评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36927729/

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