匿名内部类与Lambda表达式

一.匿名内部类
谁没有名字:匿名内部类指的是接口的实现类 或者 抽象类的子类没有名字。
1.前提:
1)必须要有一个接口、抽象类(普通类也可以,但是方法不会强制重写,不建议)
2)格式:
new 接口/抽象类(){
//复写抽象方法
}
3)本质:匿名内部类的本质其实是一个接口的实现类【对象】,或者抽象类的子类【对象】

2.使用场景:
在实际运用中,如果方法的参数是父类类型,那么调用方法时可以传递子类对象,但是为了图省事不想写子类,那么这个时候可以使用匿名内部类。

public class Demo4 {public static void main(String[] args) {//匿名内部类,可调用方法useCalculator(new Calculator() {@Overridepublic int calc(int a, int b) {return a+b;}}); }public static void useCalculator(Calculator calculator){System.out.println(calculator.calc(10,20));}
}
interface Calculator{int calc(int a,int b);
}
打印结果
------------------------------------------------------------------
30

二.Lambda表达式
1.前提:
Lambda表达式的使用是由条件的,必须要有一个【函数式接口】,在接口中只能有一个抽象方法【但是可以有默认方法和静态方法】。

public class Demo4 {public static void main(String[] args) {//Lambda表达式(简化匿名内部类)useCalculator((a, b) -> a+b);}public static void useCalculator(Calculator calculator){System.out.println(calculator.calc(10,20));}
}@FunctionalInterface//注解:可用于检查是否为函数式接口
interface Calculator{int calc(int a,int b);//可以有默认方法,通过接口实现类对象调用default void getSum(int x,int y){System.out.println(x+y);}//通过类名调用static void  getMin(int m,int n){System.out.println(Math.min(m,n));}
}打印结果
------------------------------------------------------------------
30
//1. Lambda标准格式
(参数类型1 参数名1,参数类型2 参数名2) -> { 方法体; return 返回值;    } //2. Lambda省略格式,省略参数数据类型
(参数名1,参数名2) -> { 方法体; return 返回值;    } //3. Lambda省略格式,{}中的代码只有一条语句,那么大括号可以省略、rerturn和分号都要省略
(参数名1,参数名2) ->   返回值 //4. Lambda省略格式,参数只有一个时,()可以省略
参数名 ->   返回值

三.两者的不同之处

1.所需类型不同
匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
Lambda表达式:只能是接口
2.使用限制不同
如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式
3.实现原理不同
匿名内部类∶编译之后,产生一个单独的.class字节码文件
Lambda表达式︰编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成

匿名内部类与Lambda表达式相关推荐

  1. 匿名内部类与Lambda表达式习题

    匿名内部类与Lambda表达式习题 1.写一个函数式接口 public Operation{ public int calc(int a,int b); } 在测试类中写一个method方法,参数为O ...

  2. Java匿名内部类和Lambda表达式

    Java匿名内部类和Lambda表达式 一.Java匿名内部类 二.JavaLambda表达式 全部代码: 代码运行结果: 一.Java匿名内部类 我们在使用匿名内部类时,需要记住以下几个重要的知识点 ...

  3. java 匿名函数 构造_Java匿名内部类与Lambda表达式

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象 ...

  4. Java基础学习总结(69)——匿名内部类与Lambda表达式

    前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedy ...

  5. 【Android-Kotlin】匿名内部类与Lambda 表达式(附RecycleView监听)

    一:匿名内部类 一个Test类,里面 1)1个属性 2)1个方法 a.该方法传递的参数是一个接口对象,目的是在这个方法中可以通过这个对象来调用接口方法 接口对象的接口TestInterFace内部有一 ...

  6. 匿名内部类以及Lambda表达式(Java和C#)

    就来说一说这个匿名内部类,用Java做例子,后面插一点c#.这个东西我之前也知道了很久,一直没有认真去看过,这次就来看看吧,今天的代码量相对很多. 匿名内部类 这里就说匿名内部类,关于其他内部类老规矩 ...

  7. 匿名内部类和Lambda表达式

    匿名内部类 匿名内部类主要是针对继承(类继承.抽象类继承.接口实现)这一概念而形成的一种简化定义,首先我们来观察如下一段代码. 范例:观察传统实现方式的问题 interface IMessage {p ...

  8. 工具技巧和读文档 | 读函数式编程接口文档 | 匿名内部类 | lambda表达式 |IDEA

    Function接口,函数式接口 按入参返回值分类,大概分为4种类型,再加上多个入参就又多了Bi开头的两种. 有Ctrl+P的时候不懂参数列表该写啥,就先Ctrl+ALT看下入参类型的相关实现类! 一 ...

  9. java8 lambda 表达式详解

    lambada 表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现由函数式接口定义的唯一抽象方法 使用 lambda 表达式时,会创建实现了函数式接口的一个匿名类实例 可以将 lambda ...

最新文章

  1. Kncok之绑定事件
  2. HTML DOM简介
  3. haproxy小结(一)基础概念篇
  4. Ucenter会员同步通讯登录原理(转)
  5. day38 css的4种引入方式
  6. 使用Java Stream API将List按自定义分组规则转换成Map的一个例子
  7. 统计图学习-类型介绍
  8. Facebook Connect Magento Extension
  9. java开发常用的工具类_java开发常用工具类
  10. Android——从HellowWorld开始
  11. 怎么单凭手机进行低成本制作网页?今日让我分享一下经验
  12. 【Chrome扩展程序】解决“只能通过Chrome网上应用商店安装该程序”的方法
  13. ES6_1.块级作用域绑定_临时死区TDZ
  14. MySQL 远程连接报“ SQL 执行错误 # 1130.
  15. 移动通信技术的演变:从1G时代到5G 时代大变迁
  16. 物联网大三学生的感叹
  17. 计算机系统 计算机硬件教案,计算机硬件组成教案.docx
  18. 【区间DP】中山纪念中学暑期游Day2——取数游戏
  19. 【Windows】办公+开发工具链整理
  20. 如何制作一个loading加载页

热门文章

  1. 网络流专题(最大流与费用流)(一)
  2. 牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案
  3. 牛客网 【每日一题】5月11日题目精讲 Moovie Mooving
  4. 【每日一题】4月8日题目精讲 黑白树
  5. P4370-[Code+#4]组合数问题2【数学,堆】
  6. CF1556E-Equilibrium【栈,树状数组】
  7. P2012-拯救世界2【EGF】
  8. P4091-[HEOI2016/TJOI2016]求和【斯特林数,NTT】
  9. 线段树初见——区间询问与改变最大值
  10. 吃豆人(luogu 7472/NOI Online 2021 普及组 T2)