Object o = new o;method(o::methodName);
这样我们的编译器就知道 , 这个方法是由我们的对象o
来运行的 , 非常的明确 。
但是 , 还有一种情况就是未绑定的方法引用 , 即尚未关联到某个对象的普通方法 。对于这种引用 , 必须先提供对象 , 才能进行使用 。
interface Showable{String show(Show1 s);}class Show1{public String show(){return "hello world";}}public class test {public static void main(String[] args){Show1 s = new Show1();Showable sa = Show1::show;System.out.println(s.show());// 关键就在这里 , 我们知道这里sa实际上没有实例 , show()当然无法调用 , 但实际上这里最终会调用到对象s的show()方法// 实际上 , 这里Java知道 , 它必须接受这个参数s , 并且在s上面调用方法// 如果方法有更多参数 , 只需遵循第一个参数取得是this这种模式System.out.println(sa.show(s));}}
若不只一个参数 , 则如下
public class test {public static void main(String[] args){Show1 s = new Show1();Showable sa = Show1::show;System.out.println(s.show(1, 2));System.out.println(sa.show(s, 1, 2));}}interface Showable{String show(Show1 s, int a, int b);}class Show1{public String show(int a, int b){return "hello world";}}
实际上 , 除了普通的方法外 , 我们还可以通过new
代替方法名来引用其构造器方法 , 这也是非常有用的 , 由于构造器方法实际上绑定该类 , 相当于静态方法 , 所以我们只需要通过接口直接调用即可 。
【Java函数式编程:一、函数式接口,lambda表达式和方法引用】
经验总结扩展阅读
- 不妨试试更快更小更灵活Java开发框架Solon
- 11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍
- java 新特性之 Stream API
- java 入土--集合详解
- 4 Java I/O:AIO和NIO中的Selector
- Vue3 SFC 和 TSX 方式调用子组件中的函数
- C++ 函数重载解析策略
- 3 Java I/O:NIO中的Buffer
- 火漆可以用来干嘛
- Java程序员必会Synchronized底层原理剖析