方法引用的主要三种情况
- object::instanceMethod
- Class::instanceMethod
- Class::staticMethod
方法引用示例
方法引用 | 等价的 lambda 表达式 | 说明 |
---|---|---|
separator::equals | x -> separator.equals(x) | 这是包含一个对象和一个实例方法的方法表达式。lambda 参数作为这个方法的显示参数传入 |
String::trim | x -> x.trim() | 这是包含一个类和一个实例方法的方法表达式。lambda 表达式会成为隐式参数 |
String::cancat | (x, y) -> x.concat(y) | 同样,这里有一个实例方法,不过这次有一个显式参数。与前面一样,第一个 lambda 参数会成为隐式参数,其余的参数会传递到方法 |
Integer::valueOf | x -> Integer::valueOf(x) | 这是包含一个静态方法的方法表达式。lambda 参数会传递到这个静态方法 |
Integer::sum | (x, y) -> Integer::sum(x, y) | 这是另一个静态方法,不过这一次有两个参数。两个 lambda 参数都传递到这个静态方法。Integer.sum 方法专门创建为作为一个方法引用。对于 lambda 表达式,可以写作 (x, y) -> x + y |
Integer::new | x -> new Integer(x) | 这是一个构造器引用,lambda 参数传递到这个构造器 |
Integer[]::new | n -> new Integer[n] | 这是一个数组构造器引用,lambda 参数是数组长度 |