Java中如何使用函数引用进行方法引用?
发布时间:2023-08-18 11:52:08
在Java中,函数引用允许我们直接引用现有方法作为lambda表达式的替代。使用函数引用可以简化代码,提高代码的可读性和易维护性。
Java中的函数引用有4种形式:
1. 静态方法引用:引用静态方法。
2. 实例方法引用:引用某个实例的方法。
3. 对象方法引用:引用某个类型的任意对象的实例方法。
4. 构造函数引用:引用构造函数。
以下是对每种形式的详细说明:
1. 静态方法引用(Class::staticMethod):
静态方法引用通过类名和方法名来引用静态方法。例如,假设有一个名为Utils的类,其中有个静态方法printMessage(String message),可以使用静态方法引用来引用它:
Consumer<String> consumer = Utils::printMessage;
consumer.accept("Hello");
等价于
Consumer<String> consumer = message -> Utils.printMessage(message);
consumer.accept("Hello");
2. 实例方法引用 - 类名(ClassName::instanceMethod):
实例方法引用通过类名和方法名来引用实例方法。例如,假设有一个名为StringUtils的类,其中有一个实例方法toUpperCase(),可以使用实例方法引用来引用它:
Function<String, String> function = StringUtils::toUpperCase;
String result = function.apply("hello");
等价于
Function<String, String> function = string -> string.toUpperCase();
String result = function.apply("hello");
3. 实例方法引用 - 实例名::方法名:
实例方法引用通过实例名和方法名来引用实例方法。例如,假设有一个名为StringUtils的类,其中有一个实例方法capitalize(),可以使用实例方法引用来引用它:
StringUtils utils = new StringUtils();
Function<String, String> function = utils::capitalize;
String result = function.apply("hello");
等价于
StringUtils utils = new StringUtils();
Function<String, String> function = string -> utils.capitalize(string);
String result = function.apply("hello");
4. 构造函数引用(ClassName::new):
构造函数引用通过类名和关键字new来引用构造函数。例如,假设有一个名为Person的类,其中有一个构造函数Person(String name),可以使用构造函数引用来引用它:
Supplier<Person> supplier = Person::new; Person person = supplier.get();
等价于
Supplier<Person> supplier = () -> new Person(); Person person = supplier.get();
函数引用的使用可以极大简化代码,提高代码的可读性和可维护性。
