一、 Lambda表达式

在这里插入图片描述

package lam02;

public interface addAble {
    int add(int a,int b );
}

package lam02;

public interface flyAble {
     void fly(String str);
}
package lam02;

import lam01.flyAble;

/**
 *  Lambda表达式的省略模式
 * 省略规则
 *  1:参数类型可以省略,但是有多个参数的情况下,不能只省略一个
 *  2:如果参数有且仅有一个,那么小括号可以省略
 *  3:如果代码块的语句只有一条,可以省略大括号和分号,甚至return
 *
 * 注意事项
 *  1:使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法
 *  2:必须有上下文环境,才能推导出Lambda对应的接口
 *     根据局部变量的赋值得知Lambda对应的接口:Runnable r = ()->System.out.println("Lambda表达式");
 *     根据调用方法的参数得知Lambda对应的接口:new Thread(()->System.out.println("Lambda表达式"));
 *
 * 匿名内部类和Lambda的区别
 *   一、所需类型不同
 *      1:匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
 *      2:Lambda表达式:只能是接口
 *   二、使用限制不同
 *      1:如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
 *      2:如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式
 *   三、实现原理不同
 *      1:匿名内部类:编译之后会产生一个单独的.class字节码文件
 *      2:Lambda表达式:编译只有没有一个单独的.class字节码文件,对应的字节码会在运行的时候动态生成
 */


public class addAbleDemo {

    public static void main(String[] args) {
        useAdd((int a,int y)->{

            //interface中add方法具体实现
            return a +y;
        });


        //参数类型可以省略 但是在多参数的情况下,不能只省略一个
        useAdd((a,y)->{
            return a +y;
        });

        canFly((String s)->{
            System.out.println(s);
        });

        //如果参数只有一个 小括号也可以省略
        canFly( s->{
            System.out.println(s);
        });

        //如果代码块的语句只有一条,可以省略大括号和分号
        canFly(s->System.out.println(s));

        //如果代码块的语句只有一条,可以省略大括号和分号,如果有return,return也要省略掉 不然报错
        useAdd((a,b)->a+b);

        //必须有上下文环境,才能推导出Lambda对应的接口
        Thread thread =new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Lambda表达式");
            }
        });


        Runnable r = ()->System.out.println("Lambda表达式");
        new Thread(r).start();



        new Thread(()->System.out.println("Lambda表达式"));




    }

    private static void useAdd(addAble a){
        int sum = a.add(12,43);
        System.out.println(sum);
    }

    private static void canFly(flyAble f){
        f.fly("我要飞得更高!");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值