匿名函数的实现

1.定义一个函数式接口。只有一个抽象方法的接口就是函数式接口

//1.定义一个函数式接口。只有一个抽象方法的接口就是函数式接口
interface ILike {
void hit(long param);
}

没有类名,必须借助接口或父类

通过实例化函数式接口就可以完成匿名内部类实现此接口并重写方法

interface ILike {
void hit(long param);
} @Test
void testAnonymous() throws Exception { //匿名内部类,没有类名称,必须借助接口
ILike like = new ILike() {
@Override
public void hit(long param) {
System.out.println("i like anonymous => " + param);
}
}; for (int i = 0; i < 10; i++) {
like.hit(System.currentTimeMillis());
Thread.sleep(1000);
}
}

用 Lambda 简化匿名内部类的写法

匿名内部类是为了省去类名的写法

Lambda 简化写法不但可以省去类名,还可以省去接口名和函数名。因为只有一个抽象方法,可以直接实现并指向这个抽象方法和方法体

//1.定义一个函数式接口。只有一个抽象方法的接口就是函数式接口
interface ILike {
void hit(long param);
} @Test
void testLambda() throws Exception { // 用lambda简化,因为接口中只有一个函数,所以可以直接省略实例化的接口名和函数名
ILike like = (param) -> {
System.out.println("i like lambda => " + param);
}; for (int i = 0; i < 10; i++) {
like.hit(System.currentTimeMillis());
Thread.sleep(1000);
}
}
interface PrintInfo {
void print(String data);
} static void printJob(PrintInfo printInfo, String data) {
printInfo.print(data);
} @Test
void testLambda2() {
printJob(new PrintInfo() {
@Override
public void print(String statement) {
System.out.println("We're learning " + statement);
}
}, "Lambda");
}
interface PrintInfo {
void print(String data);
} static void printJob(PrintInfo printInfo, String data) {
printInfo.print(data);
} @Test
void testLambda2() {
printJob(statement -> System.out.println("We're learning " + statement), "Lambda");
}

结论

  • 匿名函数写法和匿名类写法的前提必须基于函数式接口
  • 匿名函数写法和匿名类写法其本质是同一个东西,只是简化写法不同
  • 使用Lambda表达式简写匿名函数时,可以同时省略实现类名、函数名。除此外也可以使用传统写法

源码:https://gitee.com/VipSoft/VipBoot/blob/develop/vipsoft-demo/src/test/java/com/vipsoft/demo/AnonymousFunction.java

Java 匿名函数的概念和写法的更多相关文章

  1. js中匿名函数的N种写法

    匿名函数没有实际名字,也没有指针,怎么执行? 关于匿名函数写法,很发散~ +号是让函数声明转换为函数表达式.汇总一下 最常见的用法: 代码如下: (function() {  alert('water ...

  2. js自调用匿名函数的三种写法

    第一种: (function(){ console.log(‘hello world”) })() 第二种: (function(){ console.log(‘hello world’) }()) ...

  3. C#中委托,匿名函数,lamda表达式复习

    一.委托 1.就给类比较,类用class声明,委托用delegate声明. 2.委托要指向一个真正的方法. 3.委托的签名,要和指向的方法一样. //1.声明一个委托 public delegate ...

  4. JS匿名函数理解

    匿名函数的基本形式为(function(){...})(); 前面的括号包含函数体,后面的括号就是给匿名函数传递参数并立即执行之 匿名函数的作用是避免全局变量的污染以及函数名的冲突   1.小括号的作 ...

  5. Python 中的匿名函数,你滥用了吗?

    概念 我们从一个例子引入. 这里有一个元素为非空字符串的列表,按字符串最后一个字母将列表进行排序.如果原列表是 ['abc', 'g', 'def'],则结果应该是 ['abc', 'def', 'g ...

  6. Python的程序结构[4] -> 函数/Function[2] -> 匿名函数

    匿名函数 / Anonymous Function 匿名函数是一种不需要绑定函数名的函数 (i.e. functions that are not bound to a name).匿名函数通过 la ...

  7. Java 终于在 Java 8 中引入了 Lambda 表达式。也称之为闭包或者匿名函数。

    本文首发于 blog.zhaochunqi.com 转载请注明 blog.zhaochunqi.com 根据JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭 ...

  8. (转)Javascript匿名函数的写法、传参、递归

    (原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http: ...

  9. (转)javascript匿名函数的写法、传参和递归

    (原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-0 ...

  10. 关于js中立即执行的匿名函数写法

    /*最流行的写法*/ (function() { alert("run!") })(); /* !号可以有1~正无穷个,所以这一种就可以衍生无数种方式 */ !!!(functio ...

随机推荐

  1. Idea单窗口导入多个项目模块

    现在我们比较流行微服务,但是服务一旦多了,项目打开也是很麻烦的,运行内存16个G的电脑,基本上打开4,5个项目模块就顶不住了.那么,我们怎么把多个项目导入到一个idea窗口中呢? 实现效果 导入步骤 ...

  2. 编写高性能C#代码 —— Span<T>

    Span 提供任意内存的连续区域的类型安全和内存安全表示形式.它是在堆栈而不是托管堆上分配的ref结构,是对任意内存块的抽象 . 1.关于Span 在NET Core 2.1中首次引入 提供对任意内存 ...

  3. npm 发布包时 图片打包在新的项目引入不显示 路径错误解决方案

    使用的是vue-cli 4.0以上脚手架 vue2.6 封装好组件后 npm publish ,在其他项目引入该组件库 图片显示失败 打开F12时看到 组件库里图片是/img/图片名,可是该项目没有此 ...

  4. RK3588-MPP解码详解

    一. 简介 [RK3588从入门到精通] 专栏总目录 本篇文章进行RK3588-MPP解码的详细解析 二. 环境介绍 硬件环境: ArmSoM-W3 RK3588开发板 软件版本: OS:ArmSoM ...

  5. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-32-JavaScript的调用执行-下篇

    1.简介 在实际工作中,我们需要对处理的元素进行高亮显示,或者有时候为了看清楚操作过程和步骤我们需要跟踪鼠标点击了哪些元素需要标记出来.虽然很少遇到,但是为了以后大家可以参考或者提供一种思路,今天宏哥 ...

  6. .net core下优秀的日志框架使用解析,附源代码

    在 .NET Core 中,日志是一个非常重要的组件,它可以帮助我们记录应用程序的运行情况,以便在出现问题时进行排查.在本文中,我们将介绍五个优秀的 .NET Core 日志框架,它们分别是 Seri ...

  7. 运维初级实践——Linux系统命令教程

    区块链运维工程师在Linux环境中常用的命令.快捷键,以及安装软件和文件管理的最佳实践. 1. 常用Linux命令 1.1 文件和目录操作 ls:列出目录内容 cd:更改目录 mkdir:创建新目录 ...

  8. 如何在Web应用中添加一个JavaScript Excel查看器

    前言 在现代的Web应用开发中,Excel文件的处理和展示是一项常见的需求.为了提供更好的用户体验和功能,经常需要在Web应用中添加一个JavaScript Excel查看器,小编今天将为大家展示如何 ...

  9. tryhackme进攻性渗透测试-Advanced Exploitation 高级利用

    Steel Mountain 侦察 Nmap -sC -sV -O $IP -oN basic_scan.nmap Nmap -script=vuln $IP -oN vuln_scan.nmap 总 ...

  10. ASP.NET Core 8 在 Windows 上各种部署模型的性能测试

    ASP.NET Core 8 在 Windows 上各种部署模型的性能测试 我们知道 Asp.net Core 在 windows 服务器上部署的方案有 4 种之多.这些部署方案对性能的影响一直以来都 ...