从委托到 lambda 表达式介绍(为什么需要 lambda 表达式)

接下来,笔者将以简单的说话方式向你介绍java8的新特性,lambda表达式。

用最简单的方式告诉你为什么需要 lambda 表达式

简单地来解释委托,就是“把方法作为参数传递”。

历史来源:

有时候需要传入一段代码到程序的方法中。
如:

public class MainClass(){
    public static final void test(){
        if(true){
            //执行一段经常修改的代码
            //王奶奶去了刘奶奶家送牛奶
            //……
            //王奶奶回家
        }else if{
            //什么都不执行
        }
    }
}

出于某种原因,if 中的代码必须频繁修改。
这个时候就需要把方法写在对象的方法中,然后把对象传入到程序中调用对应的方法。(重构)

public class MainClass(){
    public static final void test(MilkSender c){
        if(true){
            c.sendMilk();
        }else if{
            //什么都不执行
        }
    }
}
public class MilkSender (){
    public void sendMilk(){
        //执行一段经常修改的代码
        //王奶奶去了刘奶奶家送牛奶
        //……
        //王奶奶回家
    }
}

MainClass.test(new MilkSender());

这个时候我们不需要硬编码地修改 test 中的代码,就可以达到 “在方法中运行自定义编码” 的效果。
不过现在,我们只需要MyClass对象中的一个方法而已,把整个MyClass对象都传进去,显得有些乱,
有没有什么方法能让我们只传入一个方法呢?
答案是有的:传入一个接口即可。

public static final void test(MyClassInterface c){
    if(true){
        c.doSomething();
    }
}

public interface MyClassInterface (){
    public void doSomething();
}

这种形式的编码我们暂时称为方法委托。(因为这种叫法来源于C/C++)

这样做以后,每次都可以直接创建“匿名对象”

MainClass.test(new MyClass(){
    @Override
    public void doSomething(){
        System.out.println("good1");
    }
);
MainClass.test(new MyClass(){
    @Override
    public void doSomething(){
        System.out.println("good2");
    }
);

这种形式的编码,我们称为匿名对象编码。

嗯,稍微好看点了,但是看起来还是很不舒服:

有时候只是需要一句代码,却写了至少5行的代码。(带来了可读性与“高度”问题)
所以为了解决“高度问题”,我们引入lambda表达式。

public void main(String[] args){
    DamnedDesigner.test(()->System.out.println("good1"));
    DamnedDesigner.test(()->System.out.println("good2"));
}

原来冗长的代码一下子变得清晰、简洁、快速。

lambda表达式不仅仅用于Java,也应用于C#、C++等常用编程语言。
lambda表达式是java8最大的亮点。(咳咳,虽然落后了十年左右才开始)。
java8在国内虽然普及率相当低,但是笔者相信这将无法避免地成为未来的趋势。

你已经了解到:方法委托是啥,匿名对象是啥,lambda表达式是啥。
(你问我lambda表达式实用吗,那就厉害了!)
lambda表达式具体介绍请看下篇。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值