匿名内部类与lamda表达式
1、为什么要使用lamda表达式
从JDK1.8开始为了简化使用者进行代码开发,专门提供有Lambda表达式的支持,利用此操作形式可以实现函数式的编程,对于函数式编程比较著名的语言:haskell,Scala,利用函数式的编程可以避免掉面向对象编程之中的一些繁琐的问题。
面向对象在其长期发展的过程中一直有一部分的反对者认为面向对象过于繁琐,比如使用匿名内部类:
1 public interface IMessage {
2 public void send(String str);
3 }
4 public class Demo {
5 public static void main(String args[]){
6 IMessage msg = new IMessage() {
7 @Override
8 public void send(String str) {
9 System.out.println("消息发送:"+str);
10 }
11 };
12 msg.send("hahahaha");
13 }
14 }
上面语句的核心功能只有一行核心语句,但是为了这一行核心语句依然需要按照完整的面向对象给出的设计结构进行开发。所以Lambda出现。
1 public interface IMessage {
2 public void send(String str);
3 }
4 public class Demo {
5 public static void main(String args[]){
6 IMessage msg = (str)->{
7 System.out.println("发送消息:"+str);
8 };
9 msg.send("hahahaha");
10 }
11 }
这种形式就避免了复杂的面向对象结构化的要求。
Lambda表达式如果要想使用,那么必须有一个重要的实现要求:SAM(Single Abstract Method)只有一个抽象方法(但可以有default和static方法),以IMessage接口为例,在这个接口里面发现只是提供有一个send()方法,除此之外没有任何其他方法定义,所以这样的接口就被称为函数式接口,而只有函数式接口才可以被Lambda表达式所使用
2、lamda表达式怎么用
对于Lambda表达式而言,提供了如下几种格式
1) 方法没有参数:()-->{ };
2) 方法有参数:(参数,参数)-->{ };
3) 如果现在只有一行语句返回:(参数,参数)-->语句;
我们看下第三种
1 public interface IMath {
2 public int add(int x,int y);
3 }
4 public class Demo {
5 public static void main(String args[]){
6 IMath math = (t1,t2) -> t1 + t2;
7 System.out.println(math.add(10,20));
8 }
9 }
利用Lambda表达式可以使代码更加简便
其中一个很经典的应用就是多线程Runnable接口的例子
1 public class Test{
2 public static void main(String[] args) {
3 /*
4 匿名内部类的方式
5 new Thread(new Runnable() {
6 @Override
7 public void run() {
8 System.out.println("nihao");
9 }
10 }).start();
11 System.out.println("你好");
12 */
13
14
15 //lambda的方式
16 new Thread(()-> {
17 for(int i = 1 ; i<100 ; i++){
18 System.out.println("It is a lambda function!");
19 }
20 }).start();
21 }
22 }
说明:lamda表达式并非只有代替匿名内部类这一个功能,还有其他的高阶功能本人未探究。
参考链接:https://blog.csdn.net/qq_36582604/article/details/81393732
匿名内部类与lamda表达式的更多相关文章
- 29 匿名内部类、函数型接口、lamda表达式的引入
匿名内部类 参考:https://www.runoob.com/w3cnote/java-inner-class-intro.html 进入后搜索匿名内部类. 函数型接口 函数式接口(Function ...
- Lamda表达式
Lamda表达式 函数式编程的产生(匿名内部类) interface Mes{ public void speak(); } public class Lam { public static void ...
- java中lamda表达式的应用
lamda表达式主要是为了解决匿名内部类的繁琐过程 范例:简单的lamda表达式 此处使用匿名内部类 package com.java.demo; interface IMessage{ public ...
- java的lamda表达式
Java8才支持lamda表达式 lamda是一中函数式编程语言 通过实现模式是匿名内部类 java使用内部类实现接口 首先定义一个接口 @FunctionalInterfaceinterface ...
- jdk8系列一、jdk8 Lamda表达式语法、接口的默认方法和静态方法、supplier用法
一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性. 在本文中我们将学习这些新特性,并用实际 ...
- JAVA8新特性——Lamda表达式
JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ Lamda表达式,读作λ表达式,它实质属于函数式编程的概念,要理解函数式编程的产生目的,就要先理解匿名内部类. 先来看看传统的匿名 ...
- Java --Lamda表达式
Lamda:属于函数式编程的概念: interface IMessage { public void print() ; } public class TestDemo { public static ...
- Lamda表达式学习笔记一
Lamda表达式学习笔记一 一.Lamda语法诠释 三傻大闹宝莱坞的主人公兰彻说的一句话让我映像深刻:用简单的语言来表达同样的意 我并不是说书上的定义怎么怎么不对,而是应该理解书本上的定义,并用简单的 ...
- Java使用lamda表达式简化代码
代码,自然写的越简洁越好啦,写的人舒服,看的人也舒服,一切为了高效. 要把有限的时间花到其它有意思的事情上去. 目的 学习简化代码的思路,使用jdk8新特性lamada表达式. 使用 某接口,只有一个 ...
随机推荐
- C语言二分查找法
参考了C语言中折半查找法(二分法)的实现 二分查找算法(C语言实现) 先附上代码 #include<stdio.h> int BinSearch(int arr[],int len,int ...
- oracle 连接数据库并查询,返回List<Map<String, Object>> 数据
package JDBC; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; impor ...
- Matplotlib(嵩老师.)
Matplotlib 库的使用 Matplotlib 库有各种可视化类构成,内部结构复杂,受Matlab启发 matplotlib.pyplot是绘制个类可视化图形的命令子库相当于快捷方式 imp ...
- 调用企业微信API拨打紧急通知电话
# 前提条件:企业信息:行业类型必须属于"医疗"大类,客服反馈说目前不支持其他行业# 准备工作:https://work.weixin.qq.com/api/doc/90000/9 ...
- [bzoj3317]First Knight
建立方程后直接高斯消元,再把0的区间找出来计算,就可以过(因为实际上这样的复杂度是5次的,且常数小)(当然这样的复杂度看上去并不太好,考虑优化)可以发现最后一行的概率都可以用上一行来表示,那么代入上一 ...
- ICCV2021 | PnP-DETR:用Transformer进行高效的视觉分析
前言 DETR首创了使用transformer解决视觉任务的方法,它直接将图像特征图转化为目标检测结果.尽管很有效,但由于在某些区域(如背景)上进行冗余计算,输入完整的feature maps ...
- NLP 开源形近字算法补完计划(完结篇)
前言 所有的故事都有开始,也终将结束. 本文将作为 NLP 汉字相似度的完结篇,为该系列画上一个句号. 起-NLP 中文形近字相似度计算思路 承-中文形近字相似度算法实现,为汉字 NLP 尽一点绵薄之 ...
- 前台json遍历拼装
//添加角色. $.ajax({ type: "post", url: "/sysRole/list", data: {page: 1, limit: 1000 ...
- html+css第三篇
css reset 原则: 但凡是浏览默认的样式,都不要使用. body,dl,dd,p,h1,h2,h3,h4,h5,h6{margin:0;font-size:12px;} ol,ul{margi ...
- 最小生成树(MST)详解+题目
原因 回顾一下旧知识 概况 在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无 ...