方法引用不能直接传递参数,而是依赖函数式接口抽象方法的签名来匹配目标方法参数;如intconsumer consumer = myclass::printint,调用consumer.accept(42)时自动传入int参数。

方法引用本身不能直接“传递”参数,它只是对已有方法的引用。基本数据类型参数的处理方式,取决于你使用方法引用的上下文——主要是函数式接口的抽象方法签名是否匹配目标方法的参数列表。
理解方法引用的本质
方法引用(如 String::length、System.out::println)本质上是函数式接口实例的快捷写法,它要求被引用方法的签名(参数类型和返回值)与函数式接口中抽象方法的签名**兼容**。基本类型参数不是“传给方法引用”,而是由函数式接口的抽象方法定义好后,在调用时自动提供。
常见场景:用基本类型参数匹配方法引用
例如,你想用 int 值调用某个静态方法:
- 定义一个接受 int 参数的静态方法:static void printInt(int x) { System.out.println(x); }
- 选择匹配的函数式接口:比如 java.util.function.IntConsumer(其抽象方法为 void accept(int value))
- 写法:IntConsumer consumer = MyClass::printInt;
- 调用:consumer.accept(42); → 触发 printInt(42)
注意装箱/拆箱与原始类型专用接口
如果错误地使用泛型接口(如 Consumer
-
IntFunction
:int → R - IntUnaryOperator:int → int
-
ToIntFunction
:T → int - 类似还有 LongConsumer、DoublePredicate 等
实例:用方法引用处理数组元素
遍历 int[] 并打印每个元素:
- int[] arr = {1, 2, 3};
- Arrays.stream(arr).forEach(System.out::println);
- 这里 Arrays.stream(int[]) 返回的是 IntStream,其 forEach 接收 IntConsumer,而 System.out::println 恰好有重载方法 println(int),签名匹配
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











