Skip to content

方法引用是Java 8中引入的一个功能,它提供了一种简洁的方式来引用已经存在的方法。方法引用可以被看作==是一个指向方法的指针==或简单的说是==方法的别名==。使用方法引用的主要目的是为了提高代码的可读性和简洁性。

方法引用的类型

方法引用主要有四种形式:

  1. 静态方法引用:它通过类名来引用静态方法。例如:ClassName::staticMethodName
  2. 实例方法引用(对象的实例方法):通过类的对象引用实例方法。例如:instanceReference::instanceMethodName
  3. 实例方法引用(任意对象的实例方法):通过类名来引用其实例方法,第一个参数作为调用者,其他参数作为该方法参数传递。例如:ClassName::methodName
  4. 构造器引用:它引用类的构造器。格式为:ClassName::new
  5. 数组构造方法引用数据类型[]::new

方法引用的使用场景

  1. 引用处必须是==函数式接口==
  2. 被引用的方法必须已经==存在==
  3. 被引用的方法==形参==和==返回值==必须和抽象方法一致
  4. 被引用的方法功能满足当前需求

方法引用一般用于那些功能性接口的实现上,特别是在使用Stream API的时候,例如在mapfilterforEach等操作中。

示例代码

让我们通过一些例子来具体看看如何在Java中使用方法引用:

  1. 静态方法引用
java
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;

public class MethodReferenceExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("hello", "world", "java", "stream");
        
        // 使用Lambda表达式
        words.stream().map(word -> word.toUpperCase()).forEach(System.out::println);

        // 使用方法引用
        words.stream().map(String::toUpperCase).forEach(System.out::println);
    }
}
  1. 实例方法引用
java
import java.util.function.Consumer;

public class MethodReferenceExample {
    public static void main(String[] args) {
        Consumer<String> printer = System.out::println;
        printer.accept("Hello, Method Reference!");
    }
}
  1. 构造器引用
java
import java.util.function.Supplier;

public class MethodReferenceExample {
    static class Message {
        Message() {
            System.out.println("Message Constructor Called");
        }
    }

    public static void main(String[] args) {
        // 使用Lambda表达式
        Supplier<Message> messageCreator = () -> new Message();
        messageCreator.get();

        // 使用构造器引用
        Supplier<Message> messageConstructorRef = Message::new;
        messageConstructorRef.get();
    }
}

评论区

欢迎留言、补充或勘误。

xiaoba.blog