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 :(得分:1)
匿名类:如果需要声明字段或其他方法,请使用它。
Lambda表达式:如果要封装要传递给其他代码的单个行为单元,请使用它。例如,如果希望对集合的每个元素执行某个操作,完成进程或进程遇到错误,则可以使用lambda表达式。 如果您需要一个简单的功能接口实例并且不应用任何前述条件(例如,您不需要构造函数,命名类型,字段或其他方法),请使用它。
基于https://docs.oracle.com/javase/tutorial/java/javaOO/whentouse.html,在不需要类字段的情况下,如果代码较短,则应使用lambda表达式。由于代码密度较高,Lambda也更容易阅读。没有lambdas的代码需要很多行来表达基本概念。我认为lambdas比其他功能更像语法糖。