小编Pri*_*nka的帖子

任何人都可以解释这句话 - "所有lambdas的要点都是延期执行"

我在" Java SE 8 for the Really Impatient:Programming with Lambdas "中进行了一个例子.

让我们看一个简单的例子.假设您记录一个事件:

logger.info("x: " + x + ", y: " + y);
Run Code Online (Sandbox Code Playgroud)

如果将日志级别设置为禁止INFO消息会发生什么?计算消息字符串并将其传递给info方法,然后该方法决定将其丢弃.如果字符串连接仅在必要时发生,那不是更好吗?

仅在必要时运行代码是lambda的用例.标准习惯用法是将代码包装在无参数lambda中:

() -> "x: " + x + ", y: " + y
Run Code Online (Sandbox Code Playgroud)

以下方法提供了延迟日志记录:

public static void info(Logger logger, Supplier<String> message) {
if (logger.isLoggable(Level.INFO))
  logger.info(message.get());
}
Run Code Online (Sandbox Code Playgroud)

我们使用类的isLoggable方法Logger来决定是否应该记录INFO消息.如果是这样,我们通过调用它的抽象方法调用lambda,该方法恰好称为get.

所以我不明白的是 - 我们可以使用logger.isLoggable(Level.INFO)示例1中的代码(不使用lambdas的代码),只有logger.isLoggable(Level.INFO)满足时才会计算消息字符串.

logger.info("x: " + x + ", y: " + y);
Run Code Online (Sandbox Code Playgroud)

在这种情况下使用lambdas有什么用?

java java-8

2
推荐指数
1
解决办法
714
查看次数

标签 统计

java ×1

java-8 ×1