Lambda 表示式與匿名內部類_程式碼
阿新 • • 發佈:2020-11-16
* lambda使用條件: * 1.使用lambda需要有介面,並且介面只有一個抽象方法。 * 2.必須要有上下文環境,才能推匯出型別。 * * * lambda和匿名內部類區別: * 所需型別不同 * 匿名內部類:可以是介面,也可以是抽象類,還可以是具體類 * Lambda表示式:只能是介面 * 使用限制不同 * 如果介面中有且僅有一個抽象方法,可以使用Lambda表示式,也可以使用匿名內部類 * 如果介面中多於一個抽象方法,只能使用匿名內部類,而不能使用Lambda表示式 * 實現原理不同 * 匿名內部類:編譯之後,產生一個單獨的.class位元組碼檔案 * Lambda表示式:編譯之後,沒有一個單獨的.class位元組碼檔案。對應的位元組碼會在執行的時候動態生成
都以一個為例子: 在Tailor裡的makeClothes裡,使用Humain介面作為引數。
1. 無引數無返回值的匿名內部類與Lambda表示式
Human介面:
public interface Human { public void wear(); }
Tailor類:
public class Tailor { public void makeClothes(Human human) { human.wear(); System.out.println("tailor start make clothes"); } }
1.1 匿名內部類
public class TestLambda { public static void main(String[] args) { Tailor tailor = new Tailor(); tailor.makeClothes(new Human() { @Override public void wear() { System.out.println("women wear a skirt"); } }); } }
1.2 lambda表示式
public class TestLambda { public static void main(String[] args) { Tailor tailor = new Tailor(); tailor.makeClothes( ()->{ System.out.println("women wear a skirt"); } ); } }
結果:
2.有引數無返回值的匿名內部類與Lambda表示式
Human介面:
public interface Human { public void wear(String color); }
Tailor類:
public class Tailor { private String color = "red"; public void makeClothes(Human human) { human.wear(color); System.out.println("tailor start make clothes"); } }
2.1 匿名內部類
public class TestLambda { public static void main(String[] args) { Tailor tailor = new Tailor(); tailor.makeClothes(new Human() { @Override public void wear(String color) { System.out.println("woman wear" + color + " shirt"); } }); } }
2.2 lambda表示式
public class TestLambda { public static void main(String[] args) { Tailor tailor = new Tailor(); tailor.makeClothes( (color)->{ System.out.println("woman wear " + color + " shirt"); } ); } }
這裡color的括號也可以去掉
結果:
3.有引數有返回值的匿名內部類與Lambda表示式
Human介面:
public interface Human { public boolean wear(String color); }
Tailor類:
public class Tailor { private String color = "red"; public void makeClothes(Human human) { boolean b = human.wear(color); System.out.println("is it easy?" + b); } }
3.1 匿名內部類
public class TestLambda { public static void main(String[] args) { Tailor tailor = new Tailor(); tailor.makeClothes(new Human() { @Override public boolean wear(String color) { System.out.println("woman wear " + color + " skirt"); return true; } }); } }
3.2 lambda表示式
public class TestLambda { public static void main(String[] args) { Tailor tailor = new Tailor(); tailor.makeClothes( color -> { System.out.println("woman wear " + color + " skirt"); return true; } ); } }
結果: