***********************lambda表达式*******************************
JDK8.0中比较重要的新特性
以前使用匿名内部类
package com.chapter18.lambda;
public class TestLambda {
public static void main(String[] args) {
TestLambda.test(new Screen(){
@Override
public void display() {
System.out.println("Hello");
}
});
}
public static void test(Screen screen){
screen.display();
}
}
真正起作用的只有打印这一句话,使用匿名内部类比较复杂,代码过多,能不能简化?
可以.从JDK8.0开始 出现lambda 可以简化 匿名内部类的编写
lambda 表达式
package com.chapter18.lambda;
public class TestLambda {
public static void main(String[] args) {
TestLambda.test(()->System.out.println("Hello"));
}
public static void test(Screen screen){
screen.display();
}
}
***********************lambda表达式的语法*******************************
一. (参数)->单行语句
package com.chapter18.lambda;
interface Screen {
public void display(String msg);
}
public class TestLambda {
public static void main(String[] args) {
TestLambda.test((String msg)->System.out.println(msg));//String可以省略
}
public static void test(Screen screen){
screen.display("你好,lambda表达式");
}
}
二.(参数)->{代码块}
package com.chapter18.lambda;
interface Screen {
public void display(String weather);
}
public class TestLambda {
public static void main(String[] args) {
TestLambda.test((String weather)->{
System.out.println("这里是 蓝桥气象局");
System.out.println("今天的天气是" + weather);
});
}
public static void test(Screen screen){
screen.display("晴天");
}
}
三.(参数)->表达式
package com.chapter18.lambda;
interface Screen {
public int add(int x,int y);
}
public class TestLambda {
public static void main(String[] args) {
TestLambda.test((x,y)-> x + y);//注意这里不需要写return
}
public static void test(Screen screen){
System.out.println(screen.add(10,20));
}
}
lambda表达式只能简化函数式接口的实现
函数式接口: 只含有一个抽象方法的接口叫做函数式接口
可以使用@FunctionalInterface 注解来验证一个接口是不是函数式接口
@FunctionalInterface
interface Screen {
public int add(int x,int y);
}
***********************参数长度可变的方法和语法糖 *******************************
JDK5.0提供的功能
演示代码:
package com.chapter18;
//参数长度可变的方法 JDK5.0的特性
public class TestParameterLengthChange {
//1. ...这个参数只能有一个
//2. ...这个参数必须是方法中的最后一个参数
//3. ...这个参数 实质是数组
public int add(int... intArr){
int sum = 0;
for(int temp:intArr){
sum = sum + temp;
}
return sum;
}
public static void main(String[] args) {
TestParameterLengthChange test = new TestParameterLengthChange();
int result = test.add(10,20,30,40);
System.out.println(result);
}
}
通过反编译查看编译后的代码 ...参数 编译器已经帮我们转换成了数组,这种语法叫做语法糖
语法糖: 语法糖这种语法并没有为语言本身提供什么实质的新功能,只是为了方便和简化程序员编程用的...