创建线程
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我是一个线程哦");
}
}).start();
lambda创建线程
new Thread(() -> System.out.println("我是一个线程哦")).start();
lambda实现抽象方法
注意事项:
- lambda中实现接口中有且仅有一个抽象方法;
必须要有上下文才能推导出lambda对应的接口.
public interface Eat {
int eat(int a,int b);
}
省略方式:
- 参数类型可以省略,多个参数的情况下,不能只省略一个;
- 参数有且只有一个时,小括号可以省略;
- 方法体或者代码块只有一条时,大括号,分号,return都可以省略.
定义一个方法,形参传入接口,方法体重写接口的方法,然后main方法调用lambda式
TestEat((int a, int b) -> {
return a + b;
});
}
//----------省略过后-----------------
TestEat((a, b) ->
a + b
);
//-----------------------------------
public static void TestEat(Eat e) {
int i = e.eat(10, 20);
System.out.println(i);//30
}
lambda和匿名内部类的区别
// 接口中有两个方法,直接报错
TestEat((a, b) ->
a + b
);
// 接口中有两个方法,匿名内部类可以使用
TestEat(new Eat() {
@Override
public int eat(int a, int b) {
return a+b;
}
@Override
public void method() {
System.out.println("匿名内部类新增的方法");
}
});
}
//-----------------------------------
public static void TestEat(Eat e) {
int i = e.eat(10, 20);
System.out.println(i);
}
}