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

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通向函数式编程的大门!!!

猜你喜欢

转载自blog.csdn.net/paxtonwu/article/details/107304871