日志案例

性能浪费的日志案例

复制代码
/**
 * 日志案例
 */
public class Demo01Logger {
    //定义一个根据日志的级别,显示日志信息的方法
    public static void showLog(int level,String message){
        //对日志的等级进行判断,如果是1级别,那么输出日志信息
        if (level==1){
            System.out.println(message);
        }
    }

    public static void main(String[] args) {
        //定义三个日志信息
        String msg1 = "Hello";
        String msg2 = "World";
        String msg3 = "Java";
        //调用showLog方法,传递日志级别和日志信息
        showLog(1,msg1+msg2+msg3);
    }
}
复制代码

发现以上代码存在一些性能浪费的问题

调用showLog方法,传递的第二个参数是一个拼接后的字符串

先把字符串拼接好然后在调用showLog非法

showLog方法中如果传递的日志等级不是1级,那么就不会如此拼接后的字符串

所以感觉字符串就白拼接了存在了浪费

 

 

 

 

 

 

 

 

使用Lambda优化日志案例

定义一个拼接信息的抽象方法,返回被拼接的信息
@FunctionalInterface
public interface MessageBuilder {
    //定义一个拼接信息的抽象方法,返回被拼接的信息
    public abstract String builderMessage();
}
使用Lambda优化日志案例
Lambda的特点:延迟加载
Lambda的使用前提,必须存在函数式接口
复制代码
public class Demo02Lambda {
    //定义一个显示日志的方法,方法的参数传递日志的等级和MessageBuilder接口
    public static void showLog(int level,MessageBuilder mb){
        //日志的等级进行判断,如果是1级,则调用MessageBuilder接口中的 方法
        if (level==1){
            System.out.println(mb.builderMessage());
        }
    }

    public static void main(String[] args) {
        //定义三个日志信息
        String msg1 = "Hello";
        String msg2 = "World";
        String msg3 = "Java";
        //调用showLog方法,参数MessageBuilder是一个函数式接口,所以可以传递Lambda表达式
        showLog(1,()->{
            //返回拼接好的字符串
            return msg1+msg2+msg3;
        });
    }
}
复制代码

使用Lambda表达式作为参数传递,仅仅是把参数传递到showLog方法中

只有满足条件,日志的等级是1级

才会调用接口MessageBuilder中的方法builderMessage

才会进行字符串的拼接

如果条件不满足,日志的等级不是1级

那么MessageBuilder接口中的方法builderMessage也不会执行

所以拼接字符串的代码也不会执行

所以不会存在性能的浪费

posted @   xjw12345  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示