方法引用
方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它们。方法引用可以被看作特定Lambda表达式的一种简单写法。
它的基本思想是,如果一个Lambda表达式的内容是调用一个方法,那么可以直接通过“类名+方法名”的方式来使用。当你需要使用方法引用时,目标引用放在分隔符::前,方法的名称放在后面,不需要括号。
方法引用的分类
方法引用主要有三类。
- 指向静态方法的方法引用 Integer::parseInt
- 指向任意类型实例方法的方法引用 String::length
- 指向现有对象的实例方法的方法引用 this::hashCode
实例
- 当接口方法的参数和表达式的参数一致,可以使用::,将接口方法的参数传递给::后的函数表达式。如果有多个同名的重载方法,编译器就会尝试从上下文中找出你指的那一个方法。
public interface LamInterface {
void show(String s);
}
package testclass;
public class Test {
public static void main(String[] args) throws Exception {
LamInterface l = System.out::println;
l.show("www");
}
}
- 可以在方法引用中使用this 参数。例如,this::equals 等同于x -> this.equals(x)。使用super 也是合法的。在一个 lambda 表达式中使用 this 关键字时,是指创建这个 lambda 表达式的方法的 this参数。
public void show() {
Runnable r= this::hashCode;
}