Lambda表达式和匿名内部类的区别
所需类型不同:
匿名内部类:可以是抽象类,可以是接口,也可以是具体类
Lambda表达式:只可以是接口
使用限制不同:
如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
如果接口中的抽象方法不止一个,就只能使用匿名内部类,不能使用Lambda表达式
实现原理不同:
匿名内部类在编译之后会产生一个单独的.class字节码文件
Lambda表达式在编译之后不会产生一个单独的.class字节码文件,对应的字节码会在运行的时候动态生成
package com.czie.iot1913.Java8.Lambda.LambdaTest02;
/**
* FileName: LambdaDemo
* Author: lps
* Date: 2022/4/3 21:49
* Sign:刘品水 Q:1944900433
*
* @author lps
*/
public class LambdaDemo {
public static void main(String[] args) {
//匿名内部类
/* useInter(new Inter() {
@Override
public void show() {
System.out.println("接口 匿名内部类");
}
});
useStudent(new Student(){
@Override
public void study() {
System.out.println("具体类 匿名内部类");
}
});
useAnimal(new Animal() {
@Override
public void method() {
System.out.println("抽象类 匿名内部类");
}
});*/
useInter(new Inter() {
@Override
public void show() {
System.out.println("接口 匿名内部类");
}
});
//Lambda表达式
// useInter(()-> System.out.println("Lambda 接口类"));
//useStudent(()-> System.out.println("Lambda 具体类"));
//Target type of a lambda conversion must be an interface lambda转换的目标类型必须是接口
//useAnimal(()-> System.out.println("Lambda 抽象类"));
//lambda转换的目标类型必须是接口
// useInter(new Inter() {
// @Override
// public void show() {
// System.out.println("哈哈嗨");
// }
//
// @Override
// public void show1() {
// System.out.println("鸡汤来了");
// }
// });
}
//抽象类
private static void useAnimal(Animal a) {
a.method();
}
//具体类
private static void useStudent(Student s) {
s.study();
}
//接口
private static void useInter(Inter i) {
i.show();
//i.show1();
}
}
package com.czie.iot1913.Java8.Lambda.LambdaTest02;
/**
* FileName: Inter
* Author: lps
* Date: 2022/4/3 21:49
* Sign:刘品水 Q:1944900433
*/
public interface Inter {
void show();
// void show1();
}
package com.czie.iot1913.Java8.Lambda.LambdaTest02;
/**
* FileName: Student
* Author: lps
* Date: 2022/4/3 21:49
* Sign:刘品水 Q:1944900433
*/
public class Student{
public void study(){
System.out.println("爱生活,爱自己");
}
}
package com.czie.iot1913.Java8.Lambda.LambdaTest02;
/**
* FileName: Animal
* Author: lps
* Date: 2022/4/3 21:49
* Sign:刘品水 Q:1944900433
*/
public abstract class Animal {
public abstract void method();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix