- λ希腊字母表中排序第十一位的字母,英语名称为Lambda
- 避免匿名内部类定义过多
- 其实质属于函数式编程的概念
当我们只想使用一次某个类的时候我们可以把它定义成一个外部类或内部类,更好的是定义为静态内部类,这样子它不会立即加载,而是在我们想要使用它的时候对外部内实例化然后再进行加载;还可以用局部内部类的方式将要使用的类定义在方法里面进行调用,但是对于这些只使用一次的类而且只有一个简单的方法的类这样子未免太繁琐了,所以JDK8提出了lambda表达式进一步简化我们的代码。
为了更加深刻的体验一下lambda带给我们的快感,我们来手撸一下
采用创建外部类的方式
public class demo {
public static void main(String[] args) {
ILambda test = new LambdaImpl();
test.likeLabmda();
}
}
//定义接口
interface ILambda{
//需要实现的方法
void likeLabmda();
}
//第一种方式:使用外部类
class LambdaImpl implements ILambda{
@Override
public void likeLabmda() {
System.out.println("只要一次你就会爱上这种赶脚");
}}
第二种采用静态内部类的方式
//定义接口
interface ILambda{
//需要实现的方法
void likeLabmda();
}
public class demo {
//定义成静态内部类
public static class LambdaImpl implements ILambda{
@Override
public void likeLabmda() {
System.out.println("只要一次你就会爱上这种赶脚");
}
}
public static void main(String[] args) {
ILambda inst = new LambdaImpl();
inst.likeLabmda();
}
}
使用匿名内部类的方式(在main方法那里和静态内部类不用)
//定义接口
interface ILambda{
//需要实现的方法
void likeLabmda();
}
public class demo {
public static void main(String[] args) {
new ILambda() {
@Override
public void likeLabmda() {
System.out.println("只要一次你就会爱上介肿赶脚");
}
}.likeLabmda();;
}
}
采用lambda表达式
//定义接口
interface ILambda{
//需要实现的方法
void likeLabmda();
}
public class demo {
public static void main(String[] args) {
ILambda inst =()-> {
System.out.println("只要一次你就会爱上介肿赶脚");
};
inst.likeLabmda();
}
}
是不是发现我们的代码越来越少,结构还很清晰。更让人兴奋的是lambda表达式还可以更简化,简化到它妈都不认识的那种;
刚刚是没有参数的,它只有一行代码我们还可以把花括号去掉,两行不行。
ILambda inst =()-> System.out.println("只要一次你就会爱上介肿赶脚");
如果有一个参数呢?
ILambda inst =(int a)-> System.out.println("a");
//可以把类型去掉
ILambda inst =(a)-> System.out.println("a");
//还可以把小括号去掉
ILambda inst =a-> System.out.println("a");
两个参数就不能去掉参数了,但是可以省略类型,直接上变量名。
PS:大家好,我是学习JAVA两年半的练习生小虾我会弹唱rap,如有错误或者不得当的地方希望大家指出,music!!!。