匿名内部类和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表达式的更多相关文章

  1. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  2. Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】

    原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...

  3. Java核心技术-接口、lambda表达式与内部类

    本章将主要介绍: 接口技术:主要用来描述类具有什么功能,而并不给出每个功能的具体实现.一个类可以实现一个或多个接口. lambda表达式:这是一种表示可以在将来的某个时间点执行的代码块的简洁方法. 内 ...

  4. Java基础教程:Lambda表达式

    Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...

  5. java函数式编程之lambda表达式

    作为比较老牌的面向对象的编程语言java,在对函数式编程的支持上一直不温不火. 认为面向对象式编程就应该纯粹的面向对象,于是经常看到这样的写法:如果你想写一个方法,那么就必须把它放到一个类里面,然后n ...

  6. 最全最强 Java 8 - 函数编程(lambda表达式)

    Java 8 - 函数编程(lambda表达式) 我们关心的是如何写出好代码,而不是符合函数编程风格的代码. @pdai Java 8 - 函数编程(lambda表达式) 简介 lambda表达式 分 ...

  7. Java 8:掌握 Lambda 表达式

    本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并对 Lambda 表达式的原理进行分析,最后对 Lambda 表达式的优缺点进行一个总 ...

  8. java8 探讨与分析匿名内部类、lambda表达式、方法引用的底层实现

    问题解决思路:查看编译生成的字节码文件 目录 测试匿名内部类的实现 小结 测试lambda表达式 小结 测试方法引用 小结 三种实现方式的总结 对于lambda表达式,为什么java8要这样做? 理论 ...

  9. Java函数式编程和lambda表达式

    为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...

随机推荐

  1. python 二维数组赋值问题

    [[]]是一个含有一个空列表元素的列表,所以[[]]*3表示3个指向这个空列表元素的引用, 修改任何一个元素都会改变整个列表 所以需要用另外一种方式进行创建多维数组,以免浅拷贝 >>> ...

  2. AndroidStudio中默认不导入org.apache.http等包的解决方法

    参考:http://www.cnblogs.com/xiadongqing/p/5942459.html Eclipse ADT中默认引入了org.apache.http包,而AndroidStudi ...

  3. 阻止brew自动更新

    export HOMEBREW_NO_AUTO_UPDATE=true  

  4. 第二十三章、 Model/View便利类表格部件QTableWidget详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 表格部件为应用程序提供标准的表格显示工具,在表格内可以管理基于行和列的数据项,表格中的最大 ...

  5. 深海 => 暴力扫描挖掘机

    平时总是联动这个联动那个,写一些小脚本,感觉零碎又没啥意思,想把市面上一些比较知名的工具集合一下,弄个方便点的躺着挖洞的工具,看看效果会不会更好,暂时名字取深海吧,估计又是一个迟迟不填的坑,灌灌灌灌水

  6. python 读取目录下的文件

    参考方法: import os path = r'C:\Users\Administrator\Desktop\file' for filename in os.listdir(path): prin ...

  7. 2020 AC Saber夏季赛 游记

    看着 \(\text{Acwing}\) 成长的我,还是写一下游记吧(?). 刚刚中考完,手速本来就老年,更慢,算法每次写完都要调,而且还查不出错.. Day 1 初赛.紧张,因为中考四五个月没打了, ...

  8. Spark3.0中Dates和Timestamps

    Spark3.0使用的是预公历,而之前都是儒略历和公历的混合(即1582年之前的日期使用儒略历,1582年之后使用公历,java.sql.Date这个API用的就是这种,而Java8里使用java.t ...

  9. HashMap 中 Key 类型的选择

    什么对象可以作为HashMap的key值? 从HashMap的语法上来讲,一切对象都可以作为Key值.如:Integer.Long.String.Object等.但是在实际工作中,最常用的使用Stri ...

  10. flink安装及standalone模式启动、idea中项目开发

    安装 环境 Ubuntu 18 jdk8 flink-1.8.1 安装步骤 安装jdk(略) 下载flink-1.8.1-bin-scala_2.12.tgz,解压到指定目录 wget http:// ...