【JAVA】Lambda接口&函数级接口

Lambda接口只用于函数级接口中,它常常被用在匿名类中,而
函数级接口————接口里面只有一个函数的接口。
标识接口————接口里面什么函数都没有的接口。

以上只是对相关概念的简述,具体解释要依靠具体代码来讲解:

//函数级接口
interface T1 {
    void t();
}

//有返回类型的函数级接口
interface T2 {
    //这里面有一个参数a
    int t(int a);
}

//有返回类型的函数级接口
interface T3 {
    //这里面有两个参数a和b
    int t(int a,int b);
}

/*匿名类一般是用Lambda接口写的*/
public class Lambda {
    //Lambda接口只用于函数级接口,那什么又是函数级接口?

    //函数级接口:接口里面只有一个函数的接口。
    //标识接口:接口里面啥函数都没有的接口。


    public static void main(String[] args) {
//        我们可以先在这里new一个匿名类,
//        再在其后面加上一对大括号。
//        若我们要实现该类里面的方法,
//        就可以用Alt+Enter键对该方法进行实现。
//        在这里我们再运用多态的原理,直接用T类型引用该子类。
//        因为,我们new的这个对象就是T接口的子类或实现类。

//        如果我们这个接口里有很多函数,
//        我们就用List,如果只有一个,我们就不用这么写了。

//        T a=new T() {
//            @Override
//            public void t() {
//                System.out.println("Hello");
//            }
//        };


        //对于函数级接口,我们不用上述的方法写。
        //由于该方法,没有参数,我们就用圆括号来代表参数。
        //实现的大括号写到箭头后面,如果大括号里只有一句话,
        //我们就直接将这句话写进输出里头就可以了。
        //箭头为"指向"的意思,
        //因为这个接口里只定义了一个没参数的函数。
        //而要实现的就是这个没参数的函数,
        //我们的实现就写到箭头后面,直接写输出就行。

        //箭头后面是T1接口的子类
        T1 a = () -> System.out.println("Hello");
        //而我们要调用该方法的话,因为是无参函数。
        //我们这里就用t()来代替。
        //函数级接口,用Lambda语法代替匿名类,会更紧凑一些。
        //但是,该方法只能用于函数级接口
        a.t();


        //对于无参函数,如果输出语句比较多,就要加大括号。

        //箭头后面是T1接口的子类
        T1 b = () -> {
            System.out.println("Hello");
            System.out.println("Hello");
        };


        //对于下面有参数的函数级接口,如果箭头后只有一个语句,
        //就直接写运算语句,且不用写返回值。
        //如果是多行语句就需要加大括号,并且要写返回值。

        //如果,函数级接口里面有了一个参数。
        //我们就可以直接在等号后面定义一个不重名的参数,
        //可以不用跟初始定义参数名一样。

        //箭头后面是T2接口的子类
        T2 c = aa -> aa * 2;
        System.out.println(c.t(20));
        //对大括号里头的程序进行执行之后,
        //本来是要返回结果的,因为这个函数是返回的,
        //所以自动就返回结果了。


        //如果是多行语句就需要加大括号,并且有要写返回值。
        //大括号里即是T2接口的子类
        T2 d = cc -> { cc *= 2;cc += 2;return cc; };
        System.out.println(d.t(30));


        //如果,函数级接口有多个参数
        //大括号里即是T3接口的子类
        T3 e = (ab, ba) -> ab + ba;
        System.out.println(e.t(20, 30));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_浮舍_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值