Lambd表达式
Lambda表达式
从JDK8开始(JDK1.8),加入了Lambda表达式的重量级新特性,为我们打开了新世界的大门。
匿名内部类
一方面匿名内部类可以省去实现类的定义;然而另一方面,匿名内部类的语法,确实太复杂了。
public class Demo { public static void main(String[] args) { new Thread(new Runnable(){ @Override public void run() { System.out.println("创建了新的线程"); } }).start(); } }
我们可以用Lambda表达式去简化匿名类中一些冗余的代码,使得同样的表达在Lambda语法中更加简单。
Lambda标准格式
由三部分组成:a.一些参数 b.一个箭头 c.一段代码
格式:
(参数列表) ~> {一些重写方法的代码}
( ):接口中抽象方法的参数列表,没有参数,就空着;有参数就写出参数,多个参数用逗号隔离。
~>:传递的意思,把参数传递给方法体{ }。
{ }:重写接口抽象方法的方法体。
上述代代码可以简化为如下:
new Thread(()->{ System.out.println("创建了新的线程"); } ).start();
接下来还有一个例子如下,给定一个Cook接口,使用Lambda表达式来在方法中传递创建的接口实例:
public interface Cook { void makeFood(); }
public class Demo { public static void main(String[] args) { invokeCook(()->{ System.out.println("饭做好了"); }); } public static void invokeCook(Cook cook){ cook.makeFood(); } }
Lambda表达式:是可推导,可以省略的
凡是根据上下文推导出来的内容,都可以省略书写
可以省略的书写内容如下:
1.(参数列表):括号中参数列表的数据类型,可以省略不写。
2.(参数列表):括号中的参数只有一个的,那么类型和()都可以省略。
3.{一些代码}:如果{}中的代码只有一行,无论是否有返回值,都可以省略)({},returm,分号)
注意:要省略{},return,分号必须一起省略。
实例如下:
public interface Cook { String makeFood(String str,String str1); }
public class Demo { public static void main(String[] args) { invokeCook((str,str1)-> str + str1 ); } public static void invokeCook(Cook cook){ cook.makeFood("生日","蛋糕"); } }
Lambda表达式就说到这了~