今天说一下lambda表达式,说的不好还请指正,感谢.
1.Lambda表达式
为了防止过多没有本身作用,就只是为了重写一些抽象方法的类出现,我们可以把一个类定义为匿名内部类.
假若接口是一个函数式接口,也就是接口中只有一个方法的接口,我们这个时候可以使用lambda表达式简化匿名内部类.
先写一个匿名内部类
示例1:
public class Test {
public static void main(String[] args) {
User u = new User() {
@Override
public void say() {
System.out.println("哈哈哈");
}
};
u.say();
}
}
interface User {
void say();
}
因为示例1中的接口是一个函数式接口,所以我们就可以对匿名内部类进行改写
改写如下:
public class Test {
public static void main(String[] args) {
User u = () -> {System.out.println("哈哈哈");};//lambda表达式
u.say();
}
}
interface User {
void say();
}
这是lambda表达式的第一种写法
lambda的基本语法为:
()->{}
():匹配要重写的抽象方法的参数列表
->:lambda符号,箭头符号,具有上下文推导的作用
{}:匹配要重写的抽象方法的方法体
lambda表达式还有其他种写法:
-
当{}中的语句体只有一句的时候,前后{}可以省略
public class Test { public static void main(String[] args) { User u = () -> System.out.println("哈哈哈");//lambda表达式 u.say(); } } interface User { void say(); } -
当接口中声明的方法中有参数时,lambda表达式中的()中的数据类型可以省略
public class Test { public static void main(String[] args) { User u = (a,b) -> System.out.println(a+b);//lambda表达式 u.say(3,4); } } interface User { void say(int a,int b); } -
当接口中声明的方法中有参数且参数为一个是时,lambda表达式中的()可以省略
public class Test { public static void main(String[] args) { User u = a -> System.out.println(a);//lambda表达式 u.say(7); } } interface User { void say(int a); } -
{}中的语句只有一句,并且是return 返回值的语句,前后的{}+return关键字都可以省略
public class Test { public static void main(String[] args) { User u = b -> b;//lambda表达式 System.out.println(u.say(7)); } } interface User { int say(int a); }