- 当要传递的Lambda体的操作 已经有实现的方法了 可以使用方法引用
- 方法引用可以看作Lambda表达式深层次的表达 换句话说 方法引用就是Lambda表达式 也就是函数式接口的一个实例 通过方法的名字来指向一个方法 可以认为式Lambda表达式的一个语法糖
- 要求: 实现接口的抽象方法的参数列表和返回值类型 必须与方法引用的方法参数列表和返回值类型保存一致
- 格式: 使用操作符 “::”将类(或对象)与方法名分隔开来
- 如下三种主要使用情况
- 对象::实例方法名称
- 类::静态方法名称
- 类::实例方法名称 ```java /**
- @author:LYY
- @Date:2022/5/13 *
- 方法引用测试(练习) */ public class MethodRefTest {
/**
* 情况一:
* 对象::实例方法
*/
@Test
void test01() {
// Lambda表达式
Consumer<String> a = (name) -> System.out.println(name);
a.accept("北京");
// 方法引用
PrintStream out = System.out;
// out实例调用他的方法 实现了Consumer接口的方法体
Consumer<String> b = out::println;
b.accept("南京");
}
/**
* 情况二
* 类::静态方法
*/
@Test
void test02() {
// lambda表达式
Comparator<Integer> c1 = (num1,num2) -> Integer.compare(num1,num2);
int compare = c1.compare(55, 66);
System.out.println(compare);
System.out.println("****************");
// 方法引用
Comparator<Integer> s1 = Integer::compare;
int compare1 = s1.compare(66, 55);
System.out.println(compare1);
}
/**
* 情况三
* 类::实例方法
* 方法存在两个参数 其中一个参数作为调用者时 可以使用方法引用 类::实例方法
*/
@Test
void test03() {
// lambda表达式
Comparator<String> s1 = (str1, str2) -> str1.compareTo(str2);
int compare1 = s1.compare("a", "B");
System.out.println(compare1);
// 方法引用 类::实例方法
Comparator<String> s2 = String::compareTo;
int compare2 = s2.compare("B", "a");
System.out.println(compare2);
}
}
```