函数式接口
函数式接口的优点
函数式接口:有且只有一个抽象方法的接口,接口中可以有其他方法(静态,默认,私有),@FunctionalInterface此注解可以用于检测是否是函数式接口。函数式接口可以作为方法的参数和返回值类型,这里就不在举例说明。
函数式接口的优点:
1.函数式接口可以使用Lambda表达式,书写更简洁。
2.函数式接口可以看成匿名内部类的“语法糖”,但是底层实现不一样,使用匿名内部类编译时会多出一个 “外部类$内部类” 的class文件,而使用Lambda表达式不会,编译运行消耗的性能低。
3.使用Lambda表达式重写方法,能够减少不必要的性能浪费。如下例查看日志文件案例:
//传统写法
public class Demo01Logger {
//定义一个显示日志信息的方法
public static void showLog(int level,String message){
if(level == 1){
System.out.println(message);
}
}
public static void main(String[] args) {
//定义三个日志信息
String msg1 = "hello ";
String msg2 = "world ";
String msg3 = "java";
//调用show方法传递日志级别和信息
//如果等级不符合,三个拼接好的字符串完全没用到,就造成了资源的浪费
//所以使用Lambda表达式来优化
showLog(2,msg1+msg2+msg3);
}
}
//接口类
@FunctionalInterface
public interface BuilderMessage {
String builderMeg();
}
//main
public static void showLog(int level,BuilderMessage builderMessage){
if (level ==1){
builderMessage.builderMeg();
}
}
public static void main(String[] args) {
//定义三个日志信息
String msg1 = "hello ";
String msg2 =