欢迎访问宙启技术站
智能推送

Java中的匿名函数和方法引用

发布时间:2023-05-30 14:48:58

Java是一种面向对象的编程语言,它的主要特点是强类型和静态类型。Java中的函数与方法一直是两个不同的概念。然而,从Java 8开始,引入了一些新的概念——匿名函数和方法引用——来改变常规的Java编程方式。在本文中,我将简要讨论匿名函数和方法引用,并解释你如何使用它们来提高你的代码的可读性和可维护性。

一、匿名函数

匿名函数是一种没有名称的函数。在Java中,我们可以使用lambda表达式实现匿名函数。

语法:

(parameter1, parameter2, …) -> expression  

(parameter1, parameter2, …) -> { statement1; statement2; … }

注意:lambda表达式可以使用一种新的语法结构,无需编写方法声明和方法名称。我们可以使函数与方法具有相似的结构。

示例:

public class LambdaTest {

   public static void main(String args[]) {

      //匿名函数

      MathOperation addition = (int a, int b) -> a + b;

      MathOperation subtraction = (a, b) -> a - b;

      MathOperation multiplication = (int a, int b) -> { return a * b; };

      MathOperation division = (int a, int b) -> a / b;

      System.out.println("10 + 5 = " + operate(10, 5, addition));

      System.out.println("10 - 5 = " + operate(10, 5, subtraction));

      System.out.println("10 x 5 = " + operate(10, 5, multiplication));

      System.out.println("10 / 5 = " + operate(10, 5, division));

   }

   interface MathOperation {

      int operation(int a, int b);

   }

   private static int operate(int a, int b, MathOperation mathOperation){

      return mathOperation.operation(a, b);

   }

}

输出:

10 + 5 = 15

10 - 5 = 5

10 x 5 = 50

10 / 5 = 2

在上面的代码示例中,我们使用匿名函数结合lambda表达式,创建了四个不同的函数:加、减、乘、除。然后,我们定义了一个方法“operate()”,使用相应的功能来执行基本的算术运算。

二、方法引用

Java 8方法引用是方法或构造函数的简写,用于lambda表达式。在函数式编程中,我们经常会遇到在参数表中传递函数调用的情况。在Java中,已经实现了lambda,但是在大多数情况下,lambda的结构和调用的函数的结构相同,因此我们可以使用方法引用来避免重复的代码。

语法:

方法引用由两个部分组成:目标引用和一个方法名。目标引用指定要调用哪个对象的方法。

目标引用 :: 方法名

方法引用有以下三种类型:

1.对象的引用::实例方法:

语法:

object::method

示例:

public class Foo {

    public void display() {

        System.out.println("Hello World!!");

    }

 

    public static void main(String[] args) {

        Foo object = new Foo();

        RunMethod runMethod = object::display;

        runMethod.run();

    }

}

interface RunMethod {

    void run();

}

输出:

Hello World!!

在上面的示例中,我们定义了一个接口“RunMethod”,其中只有一个方法“run()”。然后,我们定义了一个类“Foo”,并在该类中声明函数“display()”,该函数有输出“Hello World”的语句。接下来,我们为“display()”分配了一个目标对象的引用,即“object”对象,并在lambda表达式中使用了该引用。

2.Class::静态方法:

语法:

ClassName :: staticMethodName

示例:

public class Example {

   public static void printMessage() {

      System.out.println("Hello, World!");

   }

   public static void main(String[] args) {

      Thread t = new Thread(Example::printMessage);

      t.run();

   }

}

输出:

Hello, World!

在上面的示例中,我们定义了一个类,其中声明了静态函数“printMessage()”来输出“Hello World”消息。然后,我们根据这个类中的静态方法“printMessage()”,创建了一个线程类实例“t”,并在构造函数中使用了该方法。接下来,我们调用“t”对象的“run()”函数,以便启动线程并开始执行。

3.Class::实例方法:

语法:

object::methodName

示例:

public class Example {

   String message;

   public Example(String message) {

      this.message = message;

   }

   public void printMessage() {

      System.out.println("Message: " + message);

   }

   public static void main(String[] args) {

      Example exmp1 = new Example("Hello, World!");

      DisplayMessage displayMessage = exmp1::printMessage;

      displayMessage.display();

   }

}

输出:

Message: Hello, World!

在上面的示例中,我们定义了一个类“Example”,并在该类中声明两个函数:构造函数和实例方法“printMessage()”。然后,我们使用构造函数创建了一个对象“exmp1”,并在该对象上分配一个引用,并将其传递给lambda表达式。最后,我们定义了一个接口“DisplayMessage”,其中只有一个函数“display()”——它调用了实例方法“printMessage()”。

总结:

Java中的匿名函数和方法引用使Java开发人员能够更轻松地开发函数式编程。使用它们,我们可以以更简洁的方式实现基本操作,从而使代码更具可读性和可维护性。因此,在你的下一个Java项目中,请尝试使用匿名函数和方法引用,以便提高你的代码效率和优化你的开发过程。