最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

Java中的Lambda详细解读

来源:博客园


(资料图)

Lambda是JDK1.8新引进的简化代码语法格式,可以替代原先的匿名内部类,lambda写法只能实现接口的方法,不能用于实现抽象类实现。

//以下代码对比一下两者写法上的区别interface Alarm{void display();}public class Lambda{public static void main(String[] args){Alarm a=new Alram(){@Overridepublic void display(){System.out.println("我是匿名内部类实现的方法");}}//简化代码Alram b=()->System.out.println("我是lambda表达式实现的方法");}}

语法

接口 变量名=(参数名称以及个数)->{实现方法};

函数式接口:

  • 保证是接口
  • 只能有一个抽象方法(public abstract可缺省)
  • 声明@FunctionalInterface注解 帮助开发人员判定是否满足函数式接口定义 可不写但需要你满足上两条
  • 函数式接口中可以定义常量(public final可缺省)
  • 函数式接口中可以写默认方法 但是Lambda表达式无法访问该方法
//声明该接口为函数式接口@FunctionalInterfaceinterface AlarmNoArg{void display();}@FunctionalInterfaceinterface AlarmOneArg{String display(String one);}@FunctionalInterfaceinterface AlarmTwoArg{public final int arg=1;public abstract int display(int a,int b);}interface AlarmThreeArg{defalut void m1(){//逻辑}void display(int[] arr);}public class Example{public static void main(String[] args){AlarmNoArg a=()->System.out.prinln("一行代码可以省略{}");a.display();AlarmOneArg b=(name)->name;//一行代码缺省{}情况下 可以直接返回值b.display("张三");//两个参数 参数名随便写 符合java变量名规范就行//返回值不是void 写结构体{}必须写returnAlarmTwoArg c=(a,b)->{return a+b;};c.display(1,2);//数组引用AlarmThreeArg d=(arr)->{for(int i:arr){System.out.println(i);}};//分号别忘啦d.display(new int[]{1,2,3,4})}}

关键词: