文章目录
一个例子小探方法引用
@Test
public void test2(){
Comparator<Integer> com1 = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
};
int compara1 = com1.compare(34, 21);
System.out.println(compara1);
System.out.println("---------------------------");
//Lambda表达式 "->"
Comparator<Integer> com2 = (o1,o2) -> Integer.compare(o1, o2);
int compara2 = com2.compare(12, 21);
System.out.println(compara2);
System.out.println("---------------------------");
//方法引用 "::"
Comparator<Integer> com3 = Integer::compare;
int compara3 = com3.compare(12, 12);
System.out.println(compara3);
}
您仔细品一下上面的例子,比较一下它和Lambda表达式
不懂Lambda表达式,来您这边请
废话不多说,咱们进入正题。
什么是方法引用
方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。
方法引用,说白了本质上就是Lambda表达式,而Lambda表达式作为函数式接口的实例。所以方法引用,也是函数式接口的实例。
为什么要用
方法引用通过方法的名字来指向一个方法。
方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
本质目的就是看着牛!
使用情景:当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!
使用格式
使用格式: 类(对象) :: 方法名
具体分为如下三种情况:
- 对象 :: 非静态方法
- 类 :: 静态方法
- 类 :: 非静态方法
@Test
public void test1(){
Consumer<String> con1 = s -> System.out.println(s);
con1.accept("Hello World!");
System.out.println("---------------");
PrintStream ps = System.out;
Consumer<String> con2 = ps :: println;
con2.accept("hello world!");
}
以上例子您好好把玩,再结合Lambda表达式,深入理解。
方法引用使用的要求:要求接口中的抽象方法的形参列表和返回值类型 与方法引用的方法的形参列表和返回值类型相同!