lamda表达式的由来
Lambda表达式(参考狂神说)
推导lambda
package test;
/*
推到lambda
*/
import static java.lang.System.*;
public class testlamda1 {
//3. 静态内部类
static class Like2 extends Like implements Ilike {
@Override
public void lambda() {
out.println("i like javaee");
}
public static void main(String[] args) {
Ilike like = new Like();
like.lambda();
like = new Like2();
like.lambda();
//4.局部内部类
class Like3 extends Like implements Ilike {
@Override
public void lambda() {
out.println("i like spring ");
}
}
like = new Like3();
like.lambda();
// 5。匿名内部类(没有类的名称,必须借助接口或父类)
like = new Ilike(){
@Override
public void lambda() {
out.println("i like maven");
}
};
like.lambda();
// 6. lambda简化
like = ()->{
out.println("i like javase ");
};
like.lambda();
}
}
//1. 定义一个函数式接口
interface Ilike {
void lambda();
}
// 2. 实现类
static class Like implements Ilike {
@Override
public void lambda() {
out.println("i like java");
}
}
}
例1
package test;
public class testlambda2 {
public static void main(String[] args) {
ILove love = (int a)->{
System.out.println("i love number"+a);
};
love.love(14);
}
}
interface ILove{
void love(int a);
}
简化
package test;
public class testlambda2 {
public static void main(String[] args) {
// 简化1
ILove love = null;
love = a -> {
System.out.println("i love "+a);
};
love.love(5);
// 简化2
love = a -> System.out.println("i love aa"+a);
love.love(520);
}
}
interface ILove{
void love(int a);
}
--------------------------------------------------------------------------------------------
package com.dubbo.consumer.testlamda;
//函数式接口
interface Lambda{
void one();
}
//阶段1 通常的实现类
class Stage1 implements Lambda {
@Override
public void one() {
System.out.println("Stage1 普通类实现接口");
}
}
public class TestLambda{
static class Stage2 implements Lambda { //阶段2 静态内部类
@Override
public void one() {
System.out.println("Stage2 静态内部类实现接口");
}
}
public static void main(String[] args) {
// Lambda lambda = new Stage1();
// lambda.one();//查看控制台正常输出
// lambda = new Stage2();
// lambda.one();//查看控制台正常输出
class Stage3 implements Lambda {//阶段3 局部内部类(位于方法中)
@Override
public void one() {
System.out.println("Stage3 局部内部类实现接口");
}
}
// lambda = new Stage3();
// lambda.one();//查看控制台正常输出
//
// lambda = new Lambda() { //阶段4 匿名内部类,在方法中 必须通过接口或者父类才能实例化
// @Override
// public void one() {
// System.out.println(("Stage4 匿名内部类实现接口"));
// }
// };
// lambda.one();//查看控制台正常输出
//阶段5 lambda表达式出现了
Lambda lambda = new Stage1();
lambda = () -> {
System.out.println("lambda来了");
};
lambda.one();//查看控制台正常输出
//另外特例的 函数式接口的参数只有一个时()可以省略,方法体只有一行时{}可以省略
lambda = () -> System.out.println("匿名内部类实现接口");
lambda.one();//查看控制台正常输出
}
}
注意:
- 代码有多行不能去掉花括号(简化2)== 只能由一行代码
- 必须是函数式接口(接口里只有一个方法)