如何在不进行评估的情况下存储布尔测试/表达式?

时间:2014-08-12 00:57:40

标签: java boolean boolean-expression

所以我希望能够在不存储值boolean / true)的情况下存储false测试,我希望能够通过方法传递多个这些boolean测试。甚至可能切换参数和运算符。反正有吗?

我已经看到有些人将它们保存为String然后使用BeanShell中的Interpreter,但还有其他方法吗?或者我应该尽量创造一种方法来做到这一点?

2 个答案:

答案 0 :(得分:2)

在Java 8中,您可以使用lambda。 java.util.function有许多类,表示返回布尔值的函数(PredicateBiPredicateIntPredicateDoublePredicate等),这些类型可以是用于保存返回布尔值的表达式。例如:

BiPredicate<Integer,Integer> pred = (x, y) -> x > y;

现在pred包含一个测试第一个整数是否更大的函数,但是在您使用类似

之类的函数之前,该函数并未实际评估
boolean result = pred.test(arg1, arg2);

答案 1 :(得分:0)

您可以使用匿名函数存储表达式以供将来使用。例如:

class GreaterThanTester implements Callable<Boolean> {

    private int a;
    private int b;

    public GreaterThanTester(int a, int b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public Boolean call() {
        return (a > b);
    }
}

然后,您可以像这样存储表达式:

Callable<Boolean> storedTester = new GreaterThanTester(10, 20);

然后在评估时间:

Boolean result = storedTester.call();


您可以像这样创建许多不同类型的Tester,并将它们全部存储为Callable<Boolean>