java8新特性-使用lambda表达式和语法
1、lambda表达式的基本语法形式:()->方法体。
而在整个java之中,对于lambda表达式一共定义了有三类语法:
(params) -> 单行语句;
(params) ->表达式;
(params) ->{多行语句};
package com.gwolf;
interface Message {
public void print();
}
public class TestDemo {
public static void main(String[] args) {
Message msg = () -> System.out.println("Hello World");
msg.print();
}
}

2、下面定义一个可以用于加法计算的数学接口,里面可以接收两个数据,而后进行加法计算。如果在编写lambda表达式的过程之中,如果只有一样语句,需要返回值,那么不需要有return。
package com.gwolf;
interface MyMath {
public int add(int x,int y);
}
public class TestDemo {
public static void main(String[] args) {
MyMath myMath = (x,y) -> x + y;
System.out.println("计算结果:" + myMath.add(10,20));
}
}

3、查看程序的运行结果:

4、如果说现在要在程序里面编写多行代码,那么就需要使用“{}”定义:当返回值有多行语句的时候return不能省略:
package com.gwolf;
interface MyMath {
public int add(int x,int y);
}
public class TestDemo {
public static void main(String[] args) {
MyMath myMath = (x,y) ->
{
int sum = x + y;
return sum;
};
System.out.println("计算结果:" + myMath.add(10,20));
}
}

5、我们一直在强调,如果要实现lambda表达式,那么必须有一个前提,这个前提就是接口里面的抽象方法只能够存在一个。所以为了严格这样的语法要求。可以使用函数式的接口定义。
package com.gwolf;
@FunctionalInterface
interface MyMath {
public int add(int x,int y);
}
public class TestDemo {
public static void main(String[] args) {
MyMath myMath = (x,y) ->
{
int sum = x + y;
return sum;
};
System.out.println("计算结果:" + myMath.add(10,20));
}
}

6、如果此时在接口里面定义了更多的方法的时候,那么就会直接在接口上出现错误的提示。但是从jdk1.8开始,接口的定义形式又发生了改变。在jdk1.8之前,所有的接口定义的方法其权限都属于public,可是这个严格的权限要求被“半打破”。接口可以进行动态的扩充了。一个实现好的接口,现在又突然要增加新的方法,但是这个增加的方法不希望影响到子类。这种情况下就可以使用default方法。
package com.gwolf;
@FunctionalInterface
interface Message {
public String getInfo();
default void print() {//此方法不要求子类实现
System.out.println("www.baidu.com");
}
}
public class TestDemo {
public static void main(String[] args) {
Message msg = () -> "Hello World!";
System.out.println("计算结果:" + msg.getInfo());
msg.print();
}
}
