Lambda是JDK1.8新引进的简化代码语法格式,可以替代匿名内部类。- //以下代码对比一下两者写法上的区别
- interface Alarm{
- void display();
- }
- public class Lambda{
- public static void main(String[] args){
- Alarm a=new Alram(){
- @Override
- public void display(){
- System.out.println("我是匿名内部类实现的方法");
- }
- }
- //简化代码
- Alram b=()->System.out.println("我是lambda表达式实现的方法");
- }
- }
复制代码 Lambda语法
接口 变量名=(参数名称以及个数)->{实现方法};
函数式接口:
- 保证是接口
- 只能有一个抽象方法(public abstract可缺省)
- 声明@FunctionalInterface注解 帮助开发人员判定是否满足函数式接口定义 可不写但需要你满足上两条
- 函数式接口中可以定义常量(public final可缺省)
- 函数式接口中可以写默认方法 但是Lambda表达式无法访问该方法
- //声明该接口为函数式接口
- @FunctionalInterface
- interface AlarmNoArg{
- void display();
- }
- @FunctionalInterface
- interface AlarmOneArg{
- String display(String one);
- }
- @FunctionalInterface
- interface 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 写结构体{}必须写return
- AlarmTwoArg 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})
- }
- }
复制代码 ::运算符的使用
保证方法参数数量/顺序/返回值一致 否则编译错误
- @FunctionalInterface
- interface Lam1{
- int sum(int a,int b);
- }
- interface Lam2{
- String get();
- }
- interface Lam3{
- Example create(String name,int age);
- }
- class Example{
- public static int isSum(int m,int n){
- return m+n;
- }
- public String getName(){
- return "马齐";
- }
- public Example1(String name,int age){
- this.name=name;
- this.age=age;
- }
- public Example1(){}
- public static void main(String[] arg){
- //绑定静态方法
- Lam1 a=Example::isSum;
- a.sum(1,2);
- //绑定实例方法
- Example obj=new Example();
- Lam2 b=obj::getName;
- b.get();
- //绑定构造方法
- Lam3 c=Example::new;
- Example e=c.create("张三",21);
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |