Java Lambda表达式与匿名内部类的联系和区别实例分析
作者:cakincqm 发布时间:2022-01-05 21:10:22
标签:Java,Lambda表达式,匿名内部类
本文实例讲述了Java Lambda表达式与匿名内部类的联系和区别。分享给大家供大家参考,具体如下:
一 点睛
Lambda表达式与匿名内部类存在如下相同点:
Lambda表达式与匿名内部类一样,都可以直接访问“effectively final”的局部变量,以及外部类的成员变量(包括实例变量和类变量)。
Lambda表达式创建的对象与匿名内部类生成的对象一样, 都可以直接调用从接口继承得到的默认方法。
Lambda表达式与匿名内部类主要存在如下区别:
匿名内部类可以为任意接口创建实例——不管接口包含多少个抽象方法,只要匿名内部类实现所有的抽象方法即可。但Lambda表达式只能为函数式接口创建实例。
匿名内部类可以为抽象类、甚至普通类创建实例,但Lambda表达式只能为函数式接口创建实例。
匿名内部类实现的抽象方法的方法体允许调用接口中定义的默认方法;但Lambda表达式的代码块不允许调用接口中定义的默认方法。
二 实战
1 代码
@FunctionalInterface
interface Displayable
{
//定义一个抽象方法和默认方法
void display();
default int add(int a,int b)
{
return a+b;
}
}
public class LambdaAndInner {
private int age =15;
private static String name="外部类类变量";
public void test()
{
String book="我是effectively final";
Displayable dis =()->
{
//访问 effectively final 的局部变量
System.out.println("book局部变量为:"+book);
//访问外部类的类变量和实例变量
System.out.println("外部类的age实例变量为:"+age);
System.out.println("外部类的name类变量为:"+name);
};
dis.display();
//调用dis对象从接口继承的add方法
System.out.println(dis.add(3,5));
}
public static void main(String[] agrs)
{
LambdaAndInner lambda = new LambdaAndInner();
lambda.test();
}
}
2 运行
book局部变量为:我是effectively final
外部类的age实例变量为:15
外部类的name类变量为:外部类类变量
8
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
来源:https://blog.csdn.net/chengqiuming/article/details/91356101


猜你喜欢
- 在前面的一篇文章中,简单的介绍了一下如何实现软键盘不自动弹出,使用的方法是设置android:wind
- 写完js倒计时,突然想用java实现倒计时,写了三种实现方式一:设置时长的倒计时;二:设置时间戳的倒计时;三:使用java.util.Tim
- Android RadioButton 图片位置与大小Java:rgGroup = (RadioGroup) findViewById(R.
- 使用applicationContext.xml配置文件SpringBoot默认是通过Java代码进行依赖注入,但也为xml形式的依赖注入提
- 上篇文章给大家介绍了springboot对接第三方微信授权及获取用户的头像和昵称等等1 账户注销1.1 在SecurityConfig中加入
- 本来项目是用的viewpager实现的轮播滚动,但是客户觉得轮播的效果太大众化了,于是就要我们改成渐变切换的效果。听到这需求,我最先想到是给
- Dart实体类格式class CategoryMo { String name; int count;CategoryMo({this.na
- 工具准备jdk, maven, tomcat9, vscode;上述软件的安装配置在百度就能找到很多教程, 所以此处不详述.(jdk使用1.
- 前言有时候我们在项目中,会用到一些本地 jar 包文件,比如隔壁公司自己打包的;此时无法从maven远程仓库拉取;那么我们可以考虑把 jar
- 首先使用PImage来实例化对象,再通过loadImage赋值,两层for循环遍历图片上的像素点,每隔5个像素点,画一个直径为3的圆。颜色通
- 实践过程效果代码/** * https://zhima.blog.csdn.net/ */public partial class Form
- 1、很多资料说,添加以下代码,可以隐藏地址栏,但我试了很多次,貌似不成功啊。<meta name="apple-mobile
- 1、引入依赖<dependency><groupId>org.springframework.boot</gr
- 本文主要介绍了Java实现雪花算法(snowflake),分享给大家,具体如下:简单描述最高位是符号位,始终为0,不可用。41位的时间序列,
- Maven导入thymeleaf依赖飘红1、运行环境操作系统:win10jdk版本:1.8idea版本:2020.1maven版本:3.3.
- 前言 Gallery的Item使用的是一个ImageView+TextView,并且为其设置了selector,当使用setSe
- Elasticsearch 在全文搜索里面基本是无敌的,在大数据里面也很有建树,完全可以当nosql(本来也是nosql)使用。这篇文章简单
- 1、添加spring相关jar包2、配置ehcache jar包。3、添加ehcache mybatis 适配器jar包(在mybatis官
- 本文实例讲述了Android编程调用Camera和相册功能。分享给大家供大家参考,具体如下:xml:<LinearLayout xml
- 面试题:1.如何保证多线程下 i++ 结果正确?2.一个线程如果出现了运行时异常会怎么样?3.一个线程运行时发生异常会怎样?为了避免临界区的