函数式接口:有且只有一个抽象方法的接口,称为函数式接口
当然也可以包含有其他方法(默认,静态,私有)
函数式接口可以作为方法的参数,也可以作为方法的返回值
注解 @FunctionalInterface 可以检测一个接口是否是函数式接口
package com.fgy.demo; @FunctionalInterface public interface MyFunctionalInterface { public abstract void method(); }
package com.fgy.demo; public class Demo { public static void main(String[] args) { show(() -> System.out.println("---")); } private static void show(MyFunctionalInterface o) { o.method(); } }
使用lambda表达式可以提高程序性能:
1.使用传统匿名内部类会生成额外的class文件,在性能上也有损耗。
2.Lambda的特点:延迟加载,也可以提高性能。
package com.fgy.demo2; public class Demo01Logger { public static void main(String[] args) { String msg1 = "Hello"; String msg2 = "Word"; String msg3 = "Java"; showLog(2, msg1 + msg2 + msg3); } private static void showLog(int level, String message) { System.out.println("不满足条件也执行,也拼接字符串:" + message); if (level == 1) { System.out.println("满足条件:" + message); } } }
package com.fgy.demo2; @FunctionalInterface public interface MessageBuilder { public abstract String builderMessage(); }
package com.fgy.demo2; public class Demo02Logger { public static void main(String[] args) { String msg1 = "Hello"; String msg2 = "Word"; String msg3 = "Java"; showLog(2, () -> { System.out.println("不满足条件不执行"); return msg1 + msg2 + msg3; }); } private static void showLog(int level, MessageBuilder mb) { if (level == 1) { System.out.println(mb.builderMessage()); } } }