2015-04-17 33 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比附加功能更适合语法糖。