方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。计算时,方法引用会创建函数式接口的一个实例。
当Lambda表达式中只是执行一个方法调用时,不用Lambda表达式,直接通过方法引用的形式可读性更高一些。方法引用是一种更简洁易懂的Lambda表达式。
方法引用的形式一般分为以下四种:
- 引用静态方法
- 引用某个对象的实例方法
- 引用某个类型的任意对象的实例方法
- 引用构造方法
这四种方法引用中,除“引用某个类型的任意对象的实例方法”其它三种形式的方法引用都比较容易理解。下面举例说明“引用某个类型的任意对象的实例方法”。
String[] stringsArray = {"Hello","World"};
Comparator<String> c = String::compareToIgnoreCase;
Arrays.sort(stringsArray, c);
与“引用某个对象的实例方法”不同,实例方法要通过对象来调用,方法引用对应Lambda,Lambda的第一个参数会成为调用实例方法的对象。用lambda表达式来表述上面的例子:
tring[] stringsArray = {"Hello","World"};
Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);
Arrays.sort(stringsArray, c);
网友评论