首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 8 中的拉姆达表达式是什么?

Java 8 中的拉姆达表达式是什么?

作者头像
水货程序员
修改2018-12-03 16:02:13
2.7K0
修改2018-12-03 16:02:13
举报
文章被收录于专栏:javathingsjavathings

Java 8 中的拉姆达表达式是什么?

拉姆达表达式就是一个匿名函数。在 C#中,拉姆达表达式是一个委托类型,因此拉姆达表达式可以赋值给一个委托变量。 Java 中,没有委托,Java 的设计者只能想出一些曲折的方法来实现拉姆达表达式,这种方式就是用接口。

这种接口叫做函数式接口。但是这个接口比较特殊,必须是只有一个抽象方法(接口中的方法,无论是否加 abstract,都是抽象的,加不加都可以)。如果还需定义别的抽象方法,那只能定义 Object 类中的同名方法,事实上,例如 toString 和 Clone 这种方法的声明并不是抽象的,Java API 中某些接口重新声明 Object 类中的方法,目的是为了关联 javadoc 中的注释而已。

下面是一个合法的函数式接口:

@FunctionalInterface
public interface myFunctionalInterface {
    int dosomething(int c, int b);
    String toString(); // same to Object.toString
    int hashCode(); // same to Object.hashCode
    boolean equals(Object obj); // same to Object.equals
}

只有一个 dosomething 抽象方法,其它抽象方法是 Object 中的同名方法。

这样一个接口的 dosomething 方法就对应了拉姆达表达式,也就是说拉姆达表达式可以赋值给这个接口了。

注意的是@FunctionalInterface 注解不是必须的,但是建议加上,让编译器可以有所准备,代码可读性也更好。

下面的代码是合法的:

myFunctionalInterface m=(x,y)->{return x+y;};  

还能这样写,定义一个方法,参数包含一个拉姆达表达式。

public static int f(myFunctionalInterface m,int a,int b)
{
    return m.dosomething(a, b);
}

调用

int sum=f((x,y)->{return x+y;},1,2);
int sub=f((x,y)->{return x-y;},3,4);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java 8 中的拉姆达表达式是什么?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档