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

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();
   

函数引用的使用可以极大简化代码,提高代码的可读性和可维护性。