本例子中 ,从普通类->静态内部类->局部内部类->匿名内部类->lambda表达式,整体的代码繁杂程度由繁至简。
函数式接口:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
- lambda表达式只有一行代码的情况下才可以简化成一行,如果有多行,那么就用代码块包裹
- 前提是接口为函数式接口
- 多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号(单个参数可以省略括号)
package creatthread;
public class TestLambda {
static class DrinkSpirit implements Drink {
@Override
public void haveADrink(String name, String drinkType) {
System.out.println(name + "正在喝" + drinkType);
}
}
public static void main(String[] args) {
class DrinkFanta implements Drink {
@Override
public void haveADrink(String name, String drinkType) {
System.out.println(name + "正在喝" + drinkType);
}
}
System.out.println("============普通类实现接口===============");
Drink drink1 = new DrinkCola();
drink1.haveADrink("张一", "可乐");
System.out.println();
System.out.println("============静态内部类==============");
Drink drink2 = new DrinkSpirit();
drink2.haveADrink("李二", "雪碧");
System.out.println();
System.out.println("============局部内部类==============");
Drink drink3 = new DrinkFanta();
drink3.haveADrink("王三", "芬达");
System.out.println();
System.out.println("============匿名内部类==============");
Drink drink4 = new Drink() {
@Override
public void haveADrink(String name, String drinkType) {
System.out.println(name + "正在喝" + drinkType);
}
};
drink4.haveADrink("赵四", "咖啡");
System.out.println();
System.out.println("============lambda表达式==============");
Drink drink5 = (name, drinkType) -> System.out.println(name + "正在喝" + drinkType);
drink5.haveADrink("钱五", "牛奶");
}
}
interface Drink {
public void haveADrink(String name, String drinkType);
}
class DrinkCola implements Drink {
@Override
public void haveADrink(String name, String drinkType) {
System.out.println(name + "正在喝" + drinkType);
}
}
结果:
|