Java 匿名函数的概念和写法

简介: Java 匿名函数的概念和写法

Java中的匿名函数(也称为匿名内部类或lambda表达式)是一种简洁的代码表达方式,它允许你定义一个没有名称的函数并将其传递给其他函数或方法。以下是一些使用匿名函数的好处:

  1. 简洁性:匿名函数能够以更简洁的方式编写代码,避免了创建完整的类或接口的冗长和繁琐。
  2. 减少代码重复:匿名函数可以重用,避免重复编写相同的代码块,提高了代码的复用性。
  3. 简化回调和事件处理:在需要传递回调函数或处理事件的场景中,匿名函数可以作为参数直接传递给其他方法,使得代码更加清晰易读。
  4. 提高可读性:对于某些复杂逻辑,使用匿名函数可以使代码更加简洁和易于理解。
  5. 减少类和接口的创建:通过使用匿名函数,可以减少创建额外的类或接口的需求,从而降低代码的复杂性。
  6. 支持多态性:匿名函数可以作为接口或抽象类的实现,支持多态性,使得代码更加灵活和可维护。
  7. 提高性能:在某些情况下,匿名函数可能比完整的类或接口实现更加高效,因为它们减少了类的创建和销毁开销。

总之,匿名函数在Java中提供了一种方便、灵活的代码表达方式,可以简化代码、提高可读性和性能,并减少不必要的类和接口的创建。

匿名函数的实现

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

目录
相关文章
|
8月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
350 4
|
12月前
|
存储 安全 Java
2025 年最新 40 个 Java 基础核心知识点全面梳理一文掌握 Java 基础关键概念
本文系统梳理了Java编程的40个核心知识点,涵盖基础语法、面向对象、集合框架、异常处理、多线程、IO流、反射机制等关键领域。重点包括:JVM运行原理、基本数据类型、封装/继承/多态三大特性、集合类对比(ArrayList vs LinkedList、HashMap vs TreeMap)、异常分类及处理方式、线程创建与同步机制、IO流体系结构以及反射的应用场景。这些基础知识是Java开发的根基,掌握后能为后续框架学习和项目开发奠定坚实基础。文中还提供了代码资源获取方式,方便读者进一步实践学习。
2910 2
|
前端开发 JavaScript Java
【前端学java】Java中的接口和枚举概念(8)
【8月更文挑战第9天】Java中的接口和枚举概念(8)
234 4
|
11月前
|
存储 缓存 NoSQL
java 集合入门基础理论的核心概念与实用长尾知识
本文介绍了Java集合框架的基础理论知识,包括单列集合(List、Set、Queue)和双列集合(Map)的特点及常用实现类(如ArrayList、HashSet、HashMap等)。详细讲解了集合的遍历方式(迭代器、增强for循环、Lambda表达式)和典型应用场景(如数据去重、键值存储等)。通过具体代码示例,帮助初学者理解集合框架的核心概念和实际应用,为Java编程中的数据存储与管理提供基础指导。
325 0
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
分布式计算 Java 大数据
Java 语言基础概念与常识之主要特点解析
Java是一种广泛应用于企业级开发、移动应用(如Android)、大数据处理及云计算等领域的编程语言。其核心特点包括跨平台性(一次编写,到处运行)、面向对象设计、自动垃圾回收、多线程支持和高性能表现。Java通过JVM实现跨平台,具备强大的健壮性和安全性,同时拥有丰富的标准库与活跃的开发者社区。本文深入解析Java的技术优势及其在电商系统、大数据处理和云计算中的实际应用,并提供相关面试资料供学习参考。
349 0
|
存储 Java 程序员
Java的基础概念一
### Java编程基础简介 #### 一、注释 注释用于解释代码,不会参与编译和运行。Java支持三种注释: - **单行注释**:以 `//` 开头。 - **多行注释**:以 `/* ... */` 包围。 - **文档注释**:通常用于生成开发文档。 #### 二、关键字 关键字是被Java赋予特定含义的英文单词,全部小写,且在代码编辑器中有特殊颜色标记。常用的如 `class` 表示定义一个类。
Java的基础概念一
|
缓存 Java 开发者
Java字面量详解:概念、分类与使用实例
本文介绍了Java字面量的概念、分类及应用。
812 11
|
Java 数据安全/隐私保护
Java的基础概念(二)
本文介绍了Java编程语言中的运算符和表达式,涵盖算术运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符等。重点讲解了算术运算符的使用,如加减乘除取余,并强调了整数除法和取余的特殊性。同时,详细说明了隐式转换与强制转换的概念及应用场景,以及字符串和字符的拼接规则。通过多个案例演示了不同运算符的实际应用,包括数值拆分、自增自减、三元表达式的使用等。最后简要提及了运算符的优先级,指出小括号具有最高优先级。
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
340 1