Java中的方法通常包括名称、返回类型和参数列表,以及方法体(包括执行代码)。Java方法在类别或接口中声明。从Java开始 从8开始,引入了匿名函数(也称为Lambda表达式)。简单地说,匿名函数是一种没有名称的函数,不需要在类别或界面中声明,而是在需要时直接定义。它们主要用作方法参数或赋值变量。
匿名函数语法
Java匿名函数语法如下:
(parameters) -> { function body }
其中:
立即学习“Java免费学习笔记(深入);
- parameters:函数参数(可省略)。
- ->:分隔参数和函数体的箭头操作符。
- function body:函数体,可以是单行代码或代码块。
例如,一个匿名函数接收两个整数并返回其和:
(a, b) -> { return a + b; }
若函数体只有一行代码,则可省略大括号和return关键字:
(a, b) -> a + b
如果编译器不能推断参数类型,则需要显式声明:
var func = (int a, int b) -> a + b;
本质上,当声明匿名函数时,界面实际上是通过匿名类实现的。匿名函数是实现函数接口的一种方式,只能用于与函数接口兼容的类型。
函数式接口
在Java中,用@Functionalinterface注释的接口称为函数接口,它们只有一种抽象方法(可以包括默认方法和静态方法)。
例如,Runnable接口是一个函数接口,其抽象方法是Run():
使用匿名类实现Runnable:
Runnable r = new Runnable() { @Override public void run() { System.out.println("Hello, world!"); } };
使用Lambda表达式实现Runnable:
Runnable r = () -> System.out.println("Hello, world!");
这在多线程编程中非常有用:
public static void main(String[] args) { Runnable r = () -> System.out.println("Hello, world!"); new Thread(r).start(); }
java.util.function包提供了许多常用的函数接口,例如:
- Consumer
:在不返回任何值的情况下接受一个参数。 - Supplier
:不接受参数,返回一个值。 - Function
:接受一个参数,返回一个值。
示例:
Consumer
public static void main(String[] args) { Consumer<String> consumer = (s) -> System.out.println(s); consumer.accept("Hello, world!"); }
Supplier
public static void main(String[] args) { Supplier<Integer> supplier = () -> 10; int result = supplier.get(); }
Function
public static void main(String[] args) { Function<String, Integer> f = s -> s.length(); int len = f.apply("Java"); }
总结
Java中的匿名函数(Lambda表达式)为实现函数接口提供了简单可读的方法。它们可以用于任何需要函数接口的地方,如方法参数、变量赋值等。java.util.function包提供了许多可根据需要选择使用的预定义函数接口。
以上是Java匿名lambda功能的详细内容。请关注图灵教育的其他相关文章!
