2015-04-17 37 views
-1

什麼是Lambda表達式比匿名類更好? 除了使代碼體積更小且避免了關鍵字的混亂「這」像在本例中:Lambda表達式好處

public class TestClass { 

    public String variable = "Class Level Variable"; 


    { 
    new Thread(new Runnable() { 
     String variable = "Runnable Class Member"; 
     public void run() { 
      System.out.println("->" + this.variable); 
     } 
    }).start(); 
    } 

    public static void main(String[] args){ 
    TestClass a = new TestClass(); // prints "Runnable Class Member" 
    } 
} 

然而在:

public class TestClass { 

    public String variable = "Class Level Variable"; 

    { 
    Runnable run =()->{String variable = "Runnable Class Member"; 
         System.out.println("->" + this.variable);  
         }; 
    new Thread(run).start(); 
    } 



    public static void main(String[] args){ 
    TestClass a = new TestClass(); // prints "Class Level Member" 
    } 
} 

除此之外,也看不出有什麼區別。你做?

+0

你的問題是什麼? – BMac

+1

在什麼lambda表達式比匿名類更好 –

+4

其中之一,你沒有得到每個lambda表達式一個編譯的類文件;另外,JIT可以在呼叫站點不在時優化lambda,比匿名類更好。 – fge

回答

1

匿名類:如果您需要聲明字段或其他方法,請使用它。

Lambda表達式:如果封裝了要傳遞給其他代碼的單個行爲單元,則使用它。例如,如果您希望在集合的每個元素上執行某個操作,完成某個過程或進程遇到錯誤,則可以使用lambda表達式。 如果您需要一個功能接口的簡單實例並且不適用上述任何條件(例如,您不需要構造函數,命名類型,字段或其他方法),請使用它。

根據https://docs.oracle.com/javase/tutorial/java/javaOO/whentouse.html,如果不需要類字段,則應使用lambda表達式以防短代碼段的使用。由於代碼密度更高,Lambdas也更容易閱讀。沒有lambda表達式的代碼需要很多行來表達基本概念。我認爲lambdas比附加功能更適合語法糖。