使用Lambda表达式优化日志案例

package com.chunzhi.Test02Lambda;
/*
    日志案例

    使用Lambda优化日志案例
    Lambda的特点:延迟加载
    Lambda的使用前提,必须存在函数式接口

    使用Lambda表达式作为参数传递,仅仅是把参数传递到methodLog方法中
    只有满足条件:这里的条件是日志等级为1级
        才会调用接口MessageBuilder中的方法builderMessage
        才会进行字符串的拼接
    如果条件不满足:日志的等级不是1级
        那么MessageBuilder接口的方法builderMessage也不会执行
        所以拼接字符串的代码也不会执行
    所以就不会存在性能的浪费
 */
public class Test02LambdaLogger {
    // 定义一个显示日志的方法,方法的参数传递日志的等级和MessageBuilder接口
    public static void methodLog(int level, MessageBuilder mb) {
        // 对日志的等级进行判断,如果是1级,则调用MessageBuilder接口中的builderMessage方法
        if (level == 1) {
            System.out.println(mb.builderMessage());
        }
    }

    public static void main(String[] args) {
        // 定义三个日志信息
        String msg01 = "Java";
        String msg02 = "执行";
        String msg03 = "出错";

        // 调用methodLog方法,参数MessageBuilder是一个函数式接口,所以可以传递Lambda表达式
        methodLog(2,() -> {
            // 返回一个拼接好的字符串
            return msg01 + msg02 + msg03;
        });
    }
}

函数式接口:

package com.chunzhi.Test02Lambda;
/*
    函数式接口:有且只有一个抽象方法的接口,称之为函数式接口
    当然接口中可以含有其它的方法(默认,静态,私有)
 */
@FunctionalInterface
public interface MessageBuilder{
    public abstract String builderMessage();
}

 

posted @ 2020-11-28 23:18  春志  阅读(453)  评论(0编辑  收藏  举报