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

目录
相关文章
|
2月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
1月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
2月前
|
安全 Java 编译器
Java 基础语法-面试题(53道)(基础概念+基础语法+流程控制)
Java 基础语法-面试题(53道)(基础概念+基础语法+流程控制)
59 18
|
2月前
|
Java Docker 微服务
微服务架构的概念、特点以及如何在Java Web开发中实现微服务。
微服务架构的概念、特点以及如何在Java Web开发中实现微服务。
72 1
|
2月前
|
存储 安全 搜索推荐
深入探讨Session和Cookie的概念、用途以及如何在Java Web开发中有效地使用它们进行用户状态管理。
在Java Web开发中,Session和Cookie是管理用户状态的核心技术。Session存储于服务器端,通过唯一的Session ID识别用户,确保数据安全与隐私;Cookie则存储于客户端,用于记录用户偏好等信息。两者各有优势:Session适合存储敏感数据,但需合理管理避免资源浪费;Cookie便于持久化存储,但在安全性上需谨慎设置。开发者可通过Servlet API轻松操作二者,实现个性化用户体验与应用性能优化。
51 2
|
2月前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
2月前
|
JavaScript 前端开发 Java
java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
【8月更文挑战第11天】java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
28 0
java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
|
2月前
|
缓存 前端开发 JavaScript
一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
【8月更文挑战第11天】一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
33 0
一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
|
2月前
|
前端开发 Java
【前端学java】全网最通俗易懂的JAVA抽象概念(07)
【8月更文挑战第9天】全网最通俗易懂的JAVA抽象概念
28 2
|
2月前
|
存储 安全 Java
如何理解java的泛型这个概念
理解java的泛型这个概念