vue資料監聽
阿新 • • 發佈:2020-12-08
Lambda表示式
函式式介面
-
任何介面,如果只包含唯一一個抽象方法,那麼它就是一個函式式介面
public interface Runnable{ public abstract void run(); }
-
對於函式式介面,我們可以通過lambda表示式來建立該介面的物件
Lambda表示式
-
推導Lambda表示式
/* 推導lambda表示式,從2到6,一步一步簡化 */ public class TestLambda1 { //3、靜態內部類 static class Like2 implements ILike{ @Override public void lambda() { System.out.println("i like lambda2"); } } public static void main(String[] args) { ILike like =new Like(); like.lambda(); like=new Like2(); like.lambda(); //4、區域性內部類 class Like3 implements ILike{ @Override public void lambda() { System.out.println("i like lambda3"); } } like=new Like3(); like.lambda(); //5、匿名內部類,沒有類的名稱,必須藉助介面或父類 like=new ILike() { @Override public void lambda() { System.out.println("i like lambda4"); } }; like.lambda(); //6、用lambda簡化(jdk8才出現),因為介面只有一個抽象方法,因此可以省略介面名和方法名 like=()->{ System.out.println("i like lambda5"); }; like.lambda(); } } //1、定義一個函式式介面 interface ILike{ void lambda(); } //2、實現類 class Like implements ILike{ @Override public void lambda() { System.out.println("i like lambda"); } }
-
簡化Lambda表示式
public class TestLambda2 { public static void main(String[] args) { //lambda表示式 ILove love=(int a)->{ System.out.println("i love you"+a); }; love.love(6); //簡化1:引數簡化 love=(a)->{ System.out.println("i love you"+a); }; love.love(7); //簡化2:簡化括號 love=a->{ System.out.println("i love you"+a); }; love.love(8); //簡化3:去掉花括號 love=a->System.out.println("i love you"+a); love.love(9); //總結:1、lambda表示式只能有一行程式碼的情況下才能簡化成一行(去掉花括號),如果有多行,就用程式碼塊包裹 //2、多個引數也可以去掉引數型別,要去掉都去掉,必須加上括號 } } interface ILove{ void love(int a); }
- 使用Lambda必須具有上下文推斷。 也就是方法的引數或區域性變數型別必須為Lambda對應的介面型別,才能使用Lambda作為該介面的例項。
public class TestJoin{ public static void main(String[] args) throws InterruptedException { Thread thread=new Thread(()->{for (int i = 0; i < 1000; i++) { System.out.println("vip來了"+i);//因為new Thread()方法的引數是Runnable型別的,因此後面的lambda表示式是Runnable型別的例項,而不是其他型別的例項 }}); thread.start(); } }