JDK1.8新特性之Lambda表达式()->
1.Lambda表达式
必须是该接口只有一个一般方法才能使用
2.代码实现
package com.lemon;
public class LambdaDemo {
public static void main(String[] args) {
//第一种方法
IEat a1 = new IEatImple();
a1.eat();
//第二种方法
IEat a2 = new IEat(){
@Override
public void eat() {
System.out.println("eat orange!");
}
};
a2.eat();
//第三种 Lambda方式
//优点: 代码简洁、不生产单独的class文件
//缺点:限制该接口只能有一个方法,才能使用Lambda方式
//(1)没有参数时
//IEat a3 = ()->{System.out.println("eat apple and orange");};
//代码块只有一句 可以省略大括号
IEat a3 = ()-> System.out.println("eat apple and orange");
a3.eat();
//(2)带参数是使用,参数的类型可以省略
IEat1 a4 = (username,password)-> System.out.println("username:"+ username + ",password:"+ password);
a4.eat("admin","123456");
//(3)多句代码 大括号不可省略
IEat1 a5 = (username,password)->{
System.out.print("username:"+ username);
System.out.println(",password:"+ password);
};
a5.eat("admin1","123");
//(4)带返回值的
IEat2 a6 = (name)->{
System.out.println("name:" + name);
return 6;
};
//(5)带返回值的 只有一行代码 不需要写return 6;直接写返回值
IEat2 a7 = (name)-> name != null ? 1 : 0 ;
System.out.println(a7.eat("123"));
//(6)带final修饰 要么不写,要么全写
//IEat3 a8 = (final String name)-> name != null ? 1 : 0;
IEat3 a8 = (name)-> name != null ? 1 : 0;
}
}
//只有一个抽象方法的接口 无参数
interface IEat{
public void eat();
}
//接口的实现
class IEatImple implements IEat{
@Override
public void eat() {
System.out.println("eat apple!");
}
}
//有参数
interface IEat1{
public void eat(String username,String password);
}
//带返回值的
interface IEat2{
public int eat(String name);
}
//参数final修饰
interface IEat3{
public int eat(final String name);
}
3.接口中的默认方法和静态方法
接口中只有一个一般方法,不论有几个默认方法和静态方法都不影响Lembda表达式的影响