gpt4 book ai didi

java-8 - BooleanSupplier 使用场景

转载 作者:行者123 更新时间:2023-12-04 13:25:41 27 4
gpt4 key购买 nike

当我应该考虑使用 BooleanSupplier 时,我试图了解用例场景.在其解释中的大多数示例中,我最了解这个。我想了解使用 BooleanSupplier 有什么好处提供我比简单的比较?

    String s1 = "ABC";
String s2 = "ABC";

BooleanSupplier stringEquals = () -> s1.equals(s2);
System.out.println(stringEquals.getAsBoolean());

与此相反-
    System.out.println(s1.equals(s2));

最佳答案

理论上,我可能会使用 Supplier 的主要原因s 一般是,正如@Eugene 在 his answer 中所说的那样,推迟执行。但实际上,我从来没有任何理由使用 BooleanSupplier具体来说。更重要的是,我发现很难想出一个现实生活中的使用场景......

尽管如此,我认为展示 Supplier<String> 的典型用法可能是值得的。 .我希望这可以对供应商的一般使用有所了解。

典型的例子是日志记录。假设您必须记录返回值的非常昂贵的计算的结果,但前提是日志级别设置为 DEBUG .假设这个非常昂贵的计算由方法 veryExpensive() 表示。 ,它返回一个值(对于示例而言,返回类型并不重要)。

传统的使用模式是使用 if语句,所以我们只在 DEBUG 时执行非常昂贵的计算日志级别已启用:

if (logger.isDebugEnabled()) {
logger.debug("veryExpensive() returned: " + veryExpensive());
}

这按预期工作,因为如果日志级别设置为例如 INFO ,我们永远不会调用 veryExpensive() .但是现在想象一下,您的代码中重复了相同的模式。很不错吧?一个简单的任务,比如日志记录,用 if 污染了你所有的代码。陈述......(而且我不是在发明这个,我实际上已经多次看到这种模式)。

现在想想如果 logger.debug 会发生什么接受了 Supplier<String>而不是普通的 String值(value)。在这种情况下,我们不需要 if不再声明,因为提取 String 的逻辑要记录的值现在将驻留在 logger.debug 中方法的实现。使用模式现在是:
logger.debug(() -> "veryExpensive() returned: " + veryExpensive());

哪里 () -> "veryExpensive() returned: " + veryExpensive()Supplier<String> .

这很有效,因为 veryExpensive() 的执行推迟到 logger.debug方法需要实际记录 StringSupplier<String> 返回,并且只有在 DEBUG 时才会发生这种情况日志级别已启用。

关于java-8 - BooleanSupplier 使用场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48352062/

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