延迟执行
所有的lambda表达式都是延迟执行的. 在需要的时候才运行代码.
考虑下面一个场景:
logger.info("x:"+x+"y:"+y);
当我们在代码中写下这句代码时, 不管当前的日志级别是什么, 小括号内的字符串拼接操作都会运行, 而我们知道, 如果当前日志级别高于info, 那么这个字符串拼接操作完全是无意义的.
解决这个问题, 就可以使用lambda表达式
public static void info(Supplier<String> msg) {
if (isLoggable(Level.INFO)) {
System.out.println(msg.get());
}
}
public static void main(String[] args) {
Log.i(() -> getMessage());
}
private static String getMessage() {
System.out.println("getMessage.....");
return "real message";
}
private static boolean isLoggable(Level info) {
return false;
}
当isLoggable() 返回false时, 运行结果中并不会包含"getMessage....."打印.
Supplier<String> 或者说Supplier<T> 简单理解成返回值类型为String或者通用T类型(任何类型)的接口方法.
网友评论