什么是函数式接口:
lamda表达式与方法引用只能用于函数式接口,函数式接口只包含一条接口方法。
-------------------------------------------undo-------------------------------------------------------------------
什么是lamda表达式:-------------------------------------------undo-------------------------------------------------------------------
什么是方法应用:-------------------------------------------undo-------------------------------------------------------------------
lamda表达式与方法应用的作用:-------------------------------------------undo-------------------------------------------------------------------
使用示例: 1、声明函数式接口@FunctionInterface注释标注在接口上表示该接口是函数式接口,会在IDE编译层面即可对该接口进行函数式接口约束。不标注即失去在IDE编译层面约束。
进行约束,IDE编译层面报错的函数式接口:
进行约束,IDE编译层面正确的函数式接口:
2、声明其他类型的静态方法要求:该静态方法形参与返回值与函数式接口形参与返回值一致
另外声明了一个形参不一致的方法用于使用对照比较。
class DemoClass {
//形参与函数式接口不符,用于使用对比
public static String DemoClassNoArgs(){
return "DemoClass1";
}
public static String DemoClassHaveArgs(String str){
return "DemoClass2 "+str;
}
}
3、声明函数式接口方法调用方法
class DemoUser{
public String use(DemoInterface demoInterface,String str){
//函数式接口调用
return demoInterface.inter(str);
}
}
4、以方法引用创建函数式接口对象
lamda表达式与方法引用创建函数式接口对象形参不一致时,IDE层面编译是立即报错。
以方法引用为例(编译报错):
lamda表达式与方法引用创建函数式接口对象形参一致时,IDE层面编译是正常。
以方法引用为例(编译正常):
5、以lamda表达式创建函数式接口对象极简化lamda表达式创建函数式接口对象:
完整化lamda表达式创建函数式接口对象:
6、lamda表达式与方法应用执行代码与结果显示执行代码:
public class main {
public static void main(String[] args) {
DemoUser demoUser=new DemoUser();
System.out.println("使用方法引用为函数式接口创建对象:");
String useByMethod = demoUser.use(DemoClass::DemoClassHaveArgs, "byMethod");
System.out.println(useByMethod);
System.out.println("使用简化的lamda表达式为函数式接口创建对象:");
String useByLamda = demoUser.use(demoUserArgs -> demoUserArgs, "simple");
System.out.println(useByLamda);
System.out.println("上面简化的lamda表达式复杂化的为函数式接口创建对象:");
useByLamda = demoUser.use((demoUserArgs) -> {return demoUserArgs;} , "complex");
System.out.println(useByLamda);
}
}
执行结果:



