Lambda表达式与匿名内部类的区别
匿名内部类与Lambda表达式的区别:
1、所需类型不同。匿名内部类:可以是接⼝、抽象类、具体类。Lambda表达式:只能是接⼝
2、使⽤限制不同。如果接⼝中有且仅有⼀个抽象⽅法,可以使⽤Lambda表达式,也可以使⽤匿名内部类。 如果接⼝中多于⼀个抽象⽅法,只能使⽤匿名内部类,⽽不能使⽤Lambda表达式
3、实现原理不同。匿名内部类虽然跟使⽤Lambda效果⼀样,但是会⾃动多⽣成⼀个.class字节码⽂件,只是我们在写的时候没有发觉,这也是匿名内部类跟Lambda的区别,Lambda的字节码⽂件会动态⽣成,我们看不见,这个知道即可,在具体编程中感受不到,对于初学者或⼀般开发作业中不必过多关注。
具体⽰例代码:
接⼝:Inter
public interface Inter {
void show();
}
抽象类:People
public abstract class People {
abstract void method();
}
具体类:Employee
public class Employee {
void work(){
System.out.println("雇员要⼯作");
}
}
测试类:LambdaTest
public class LamdbaTest {
public static void main(String[] args) {
useInter(new Inter() {
@Override
public void show() {
System.out.println("接⼝Inter");
}
});
usePeople(new People() {
@Override
void method() {
System.out.println("抽象类People");
}
});
useEmployee(new Employee(){
@Override
void work() {
//                super.work();
System.out.println("具体类Employee");
}
});
System.out.println("================");
//⽤ Lambda表达式
useInter(()-> System.out.println("接⼝Inter"));
/*以下两种⽅式就不可以
usePeople(() -> System.out.println("抽象类People"));
useEmployee(() -> System.out.println("具体类Employee"));        */
}
private static void useInter(Inter i) {
i.show();
}
private static void usePeople(People p) {
}
private static void useEmployee(Employee e) {
e.work();
lambda编程
}
}
运⾏结果:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。