Java中的函数指针
从Java 8开始,引入了lambda表达式,它充当函数指针。
Lambda表达式在Java 8中引入,被誉为Java 8最重要的特性。Lambda表达式促进了函数式编程,并大大简化了开发。
语法
lambda表达式的语法特征如下。
parameter -> expression body
以下是lambda表达式的几个重要特征。
- 可选类型声明 — 无需声明参数的类型。编译器可以根据参数的值推断出类型。
- 参数周围可选的小括号 — 单个参数无需用括号括起来。多个参数需要括号。
- 可选的大括号 — 如果表达式体包含单个语句,则无需使用大括号。
- 可选的return关键字 — 如果表达式体只有一个表达式用于返回值,则编译器会自动返回值。需要大括号来指示表达式返回值。
Lambda表达式示例
使用您选择的任何编辑器创建以下Java程序,例如,在C:\> JAVA中。
Java8Tester.java
public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); //with type declaration MathOperation addition = (int a, int b) -> a + b; //with out type declaration MathOperation subtraction = (a, b) -> a - b; //with return statement along with curly braces MathOperation multiplication = (int a, int b) -> { return a * b; }; //without return statement and without curly braces MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction)); System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication)); System.out.println("10 / 5 = " + tester.operate(10, 5, division)); //without parenthesis GreetingService greetService1 = message -> System.out.println("Hello " + message); //with parenthesis GreetingService greetService2 = (message) -> System.out.println("Hello " + message); greetService1.sayMessage("Mahesh"); greetService2.sayMessage("Suresh"); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation) { return mathOperation.operation(a, b); } }
验证结果
使用javac编译器编译类,如下所示:
C:\JAVA>javac Java8Tester.java
现在运行Java8Tester,如下所示:
C:\JAVA>java Java8Tester
它应该产生以下输出:
10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello Mahesh Hello Suresh
广告