Java 从匿名内部类到Lambda表达式
匿名内部类和Lambda表达式有很多类似之处,首先都是在使用的时候才对接口进行实现,只是Lambda接口中只能由一个需要被实现的方法。
所有的Lambda表达式都可以 由匿名内部类改写:
interface Face1{
//无参数无返回值
public void face();
} interface Face2{
//有一个参数无返回值
public void face(int a);
} interface Face3{
//有一个参数,有一个返回值
int face(int a);
} interface Face4{
//有两个参数,有一个返回值
int face(int a,int b);
} public class Test
{
public static void main (String[] args) throws java.lang.Exception
{
// 匿名内部类 实现接口
Face1 fn1=new Face1(){public void face(){System.out.println("匿名内部类 fn1");}};
fn1.face(); Face2 fn2=new Face2(){public void face(int a){System.out.println("匿名内部类 fn2 "+a);}};
fn2.face(10); Face3 fn3=new Face3(){public int face(int a){return a*a;}};
System.out.println("匿名内部类 fn3 :"+fn3.face(10)); Face4 fn4=new Face4(){public int face(int a,int b){return a+b;}};
System.out.println("匿名内部类 fn4 :"+fn4.face(10,9)); // Lambda表达式 实现接口
Face1 fl1=()->{System.out.println("Lambda表达式 fl1");};
fl1.face(); Face2 fl2=(a)->{System.out.println("Lambda表达式 fl2:"+a);};
fl2.face(10); Face3 fl3=(a)->{return a*a ;};
System.out.println("Lambda表达式 fl3:"+fl3.face(10)); Face4 fl4=(a,b)->a+b;
System.out.println("Lambda表达式 fl4:"+fl4.face(10,9));
}
}
运行结果:
匿名内部类 fn1
匿名内部类 fn2 10
匿名内部类 fn3 :100
匿名内部类 fn4 :19
Lambda表达式 fl1
Lambda表达式 fl2:10
Lambda表达式 fl3:100
Lambda表达式 fl4:19
Lambda表达式 在一定程度上是在匿名内部类的基础上进行代码简化(但是编译的方式不同):
Lambda的形式如: (参数)->{方法体}
1、当只有一个参数的时候可以把() 省略掉。
2、当方法体只有一条语句的时候 可以把 return关键词和{} 省略掉。
Java 从匿名内部类到Lambda表达式的更多相关文章
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】
原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...
- Java核心技术-接口、lambda表达式与内部类
本章将主要介绍: 接口技术:主要用来描述类具有什么功能,而并不给出每个功能的具体实现.一个类可以实现一个或多个接口. lambda表达式:这是一种表示可以在将来的某个时间点执行的代码块的简洁方法. 内 ...
- Java基础教程:Lambda表达式
Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...
- java函数式编程之lambda表达式
作为比较老牌的面向对象的编程语言java,在对函数式编程的支持上一直不温不火. 认为面向对象式编程就应该纯粹的面向对象,于是经常看到这样的写法:如果你想写一个方法,那么就必须把它放到一个类里面,然后n ...
- 最全最强 Java 8 - 函数编程(lambda表达式)
Java 8 - 函数编程(lambda表达式) 我们关心的是如何写出好代码,而不是符合函数编程风格的代码. @pdai Java 8 - 函数编程(lambda表达式) 简介 lambda表达式 分 ...
- Java 8:掌握 Lambda 表达式
本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并对 Lambda 表达式的原理进行分析,最后对 Lambda 表达式的优缺点进行一个总 ...
- java8 探讨与分析匿名内部类、lambda表达式、方法引用的底层实现
问题解决思路:查看编译生成的字节码文件 目录 测试匿名内部类的实现 小结 测试lambda表达式 小结 测试方法引用 小结 三种实现方式的总结 对于lambda表达式,为什么java8要这样做? 理论 ...
- Java函数式编程和lambda表达式
为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...
随机推荐
- Verilog 分频器
verilog设计进阶 时间:2014年5月6日星期二 主要收获: 1. 自己动手写了第一个verilog程序. 题目: 利用10M的时钟,设计一个单周期形状如下的周期波形. 思考: 最开始的想法是: ...
- 新手上路之如何选择Java版本
@ 目录 LTS与非LTS LTS 非LTS Java CPU与PSU Java SE.Java EE.Java ME的区别 Java SE Java EE Java ME 每一次JDK上新总有一群人 ...
- CSP-2020 退役记
CSP-2020 游记 第2次参加CSP-- Day -5~-7 每天笔试+机试 Day -8~-9 在家放松(写作业) Day 0 鸡鸭月考 Day 1 9:30以前 愉快的在别人月考的时候离开鸡鸭 ...
- go语言小知识点
fmt包相关 fmt包主要是实现了格式化的I/O函数 fmt.Println() 行打印 fmt.Printf() 格式化输出 %d int %s str %t type,类型 %p 内存地址 % ...
- 转:HTTP协议简介与在python中的使用详解
1. 使用谷歌/火狐浏览器分析 在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来.而浏览器和服务器之间的传输协议是HTTP,所以: HTML是一种用 ...
- 第9.13节 Python文件操作总结
本章老猿重点介绍了Python io模块的文件操作相关功能,包括文件打开.读.写.文件定位.文件关闭,并介绍了二进制文件和文本文件处理的差异,以及相关文件编码的一些知识,最后简单提及了Python中与 ...
- PyQt(Python+Qt)学习随笔:QTreeWidgetItem项列图标的访问方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件QTreeWidget中的QTreeWidgetItem项中可以有多列数据,每列数据都可以设 ...
- 爬取网页内容后写入文件报错UnicodeEncodeError: 'gbk' codec can't encode的问题解决方案
老猿使用如下代码读取网页内容: req = urllib.request.Request(url=url,headers=header) text = urllib.request.urlopen(r ...
- PyQt学习随笔:自定义Qt事件可以使用的事件类型的常量值范围
除了<PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料速查>介绍的Qt已经定义的事件外,Qt还支持自定义事件. 为了方便起见,可以使用 registerEventTyp ...
- QQFishing QQ钓鱼站点搭建
答:为什么要写这个代码? 当然不是做黑产去盗别人扣扣,也没有啥查看别人隐私信息的癖好,搭建该站点的适用对象为->使用社会工程学定向钓鱼攻击的安全渗透人员 另外管理员界面后端写的很丑+很烂,除了我 ...