***********************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);
}
}


通过反编译查看编译后的代码 ...参数 编译器已经帮我们转换成了数组,这种语法叫做语法糖


语法糖: 语法糖这种语法并没有为语言本身提供什么实质的新功能,只是为了方便和简化程序员编程用的...