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表达式
为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...
随机推荐
- 16_Android的数据存储_ SharedPreference、XML和JSON
1. Android读写首选项 1.1 SharedPreferences SharedPreferences 是一种轻型的数据存储方式,它的本质是基于XML文件存储Key-Value键值对数据,通常 ...
- Spring Cloud 学习 (一) Eureka
微服务的功能主要有以下几个方面: 服务的注册和发现 服务的负载均衡 服务的容错 服务网关 服务配置的统一管理 链路追踪 实时日志 服务注册是指向服务注册中心注册一个服务实例,服务提供者将自己的服务信息 ...
- Codeforces Round 665 (div2)
2020.8.22 装修完了我的博客,喜欢这个造型,挂上友链就更好了 昨天cf就是一个彻头彻尾的悲剧,本来能上蓝,结果因为在A题耽误时间过多导致掉了30分,不过没关系,这算是一个小波动吧,影响不了什么 ...
- C++编程指南续
三. 命名规则 比较著名的命名规则当推Microsoft公司的"匈牙利"法,该命名规则的主要思想是"在变量和函数名中加入前缀以增进人们对程序的理解".例如所有的 ...
- 老猿Python博客文章目录索引
本目录提供老猿Python所有相关博文的一级目录汇总,带星号的为收费专栏: 一.专栏列表 本部分为老猿所有专栏的列表,每个专栏都有该专栏置顶的博文目录: 专栏:Python基础教程目录 专栏:* 使用 ...
- 第9.7节 Python使用write函数写入文件内容
一. 语法 write(data) data为要写入的数据,可以为字符串str类型,也可以是bytes类型. 返回值为实际写入的数据数,在写入数据为str类型时,该数据为实际写入的UNIOCODE字符 ...
- PyQt(Python+Qt)学习随笔:QTreeWidgetItem项列图标的访问方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件QTreeWidget中的QTreeWidgetItem项中可以有多列数据,每列数据都可以设 ...
- 记账本APP小升级
增加了显示当月总收入和总支出的功能,增加了选择收支类型的功能,删去了删除账目后恢复的功能. 1.数据库的升级 1.entity 添加了一个收支类型的字段: package com.example.ca ...
- Xray批量化自动扫描
关于Xray高级版破解: https://www.cnblogs.com/Cl0ud/p/13884206.html 不过好像新版本的Xray修复了破解的BUG,亲测Xray1.3.3高级版仍然可以破 ...
- IntelliJ IDEA2019.3.2破解/永久激活/安装教程
我想大家用过史上最好的开发工具就是idea了,没有之一!看到大家都在找idea的激活教程,今天我也在这里跟大家分享一下. 本教程针对现在官网针对的版本是idea2019.3.2,为防止以后会更新破解失 ...