java lambda函数式接口(一)

一、lambda 原理理解

1、创建函数式接口
函数式接口:有且仅有一个抽象方法的接口

public interface OrderService {

    void get();
}

2、由匿名内部类、逐步演化为lambda调用

  //写法一
        /**
         *通过匿名内部类 构造
         * new OrderService() 创建一个类对象,get()调用接口的方法
         */
       new OrderService() {
            @Override
            public void get() {
                System.out.println("被运行了1");
            }
        }.get();


       //写法二
        /**
         *通过匿名内部类 构造
         * new OrderService() 创建一个类对象orderService2,用创建的对象orderService2
         * ,执行get()调用接口的方法
         */
       OrderService orderService2 = new OrderService() {
           @Override
           public void get() {
               System.out.println("被运行了2");

           }
       };
       orderService2.get();

       //写法三
        /**
         * ( OrderService)()-> System.out.println("被运行了3")
         * ():默认匿名接口get()方法
         * -> System.out.println("被运行了3"):给get() 方法赋值执行体内容
         * ( OrderService) :强制转换为匿名对象
         * (( OrderService)()-> System.out.println("被运行了3")): 创建的匿名对象
         *
         * .get(): 执行调用创建的匿名对象的get方法
         */
        (( OrderService)()-> System.out.println("被运行了3")).get();

二 、测试java8 中的函数式接口
java8 提供的函数接口
https://www.runoob.com/java/java8-functional-interfaces.html

Supplier * 无参数,返回一个结果

Supplier 接口的定义如下

package java.util.function;

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

使用方式一

// T get() 是有返回结果T 的,所以return的是get  方法执行 返回的结果,(Supplier)()-> { …………  return xxxx}),是创建了Supplier 类型的接口对象
   Supplier supplier= ((Supplier)()-> {
            System.out.println("Supplier  运行成功!");
            return new Integer(123);
        });
  //通过 supplier.get() 是通过创建的接口对象,执行get(),获取返回结果
        System.out.println(supplier.get());

使用方式二
如果不知道怎么实现下面的匿名内部类方式,可以通过下面的ALT+ENTER 右键的方式 idea 自动提示实现匿名内部类的实现方式;
在这里插入图片描述
创建如下对象,返回的是 return 返回的数据类型,用 变量e 接受T get()返回的数据结果

Integer e= (Integer) new Supplier() {
            @Override
            public Object get() {
                return new Integer(0);
            }
        }.get();
        
        System.out.println(e);

综上所述,在目前的认知中 lambda表达式写法和以上通过匿名内部类的实现方式基本可以等价实现同样的功能,只不过是lambda写法更加简洁优雅;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值