Java8函数式接口与Lambda表达式详解

6 篇文章 0 订阅

Java8函数式接口与Lambda表达式详解

#Java这门语言是面向对象的,因此在执行一些方法时候如果需要传递参数,这些参数也只能是基本类型数据,或者引用类型;而引用类型是以对象形式存在的;但是实际的需求可能是需要将一个方法作为参数传递到其他方法中,在java8之前只能通过匿名内部类的形式进行传递,例如:

public interfaceFightable{
voidfight(intpower);
}
public class TestFightable{
publicvoidattack(Fightablef,intp){
f.fight(p);
}
publicstaticvoidmain(String[]args){
TestFightabletf=newTestFightable();
tf.attack(newFightable(){
publicvoidfight(intpower){
//具体实现
}
},100);
}
}

由于以上代码的冗余,以及可读性问题,所以在java8中新增函数式接口以及lamda表达式,对以上操作进行简化:

TestFightabletf=newTestFightable();
tf.attack(p->System.out.println("攻击"),100);

函数式接口

函数式接口(@FunctionalInterface),所表示的是接口中只能存在一个未实现的方法:

@FunctionalInterface
public interfaceCalc{
intminus(inta,intb);
}

@FunctionalInterface用于标注当前接口是一个函数式接口

Lamda表达式

lamda表达式是一种简约的流式编程表达形式(js中称之为箭头函数),语法形式:
()->{}
()表示需要实现的方法参数列表
->指向方法的实现
{}方法的具体实现

基本写法

(inta,intb)->{
int c=a+b;
return c;
}

另外编译器也会根据上下文自动推断参数类型,因此以上代码可以继续简化:

(a,b)->{
int c=a+b;
return c;
}

如果需要实现的方法内部只有一行代码需要执行,则可以如下表示:

(a,b)->a+b;

如果方法只有一个参数时,可以简化为:

a->System.out.println(a);

函数式接口以及lambda表达式的存在,打开了Java通向函数式编程的大门!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值