概念: 方法引用简单粗暴就是一句话,用来简化Lambda表达式的! 是一种语法糖
基本格式: 方法体只有一行代码,并且只是某个方法的调用
使用场景: 如果你要使用lambda函数,而且有现成的方法可以实现lambda表达式要做的功能,那么就可以使用方法引用了,比如要实现比较两个数大小的功能,comparator是一个函数式接口,我们可以选择使用lambda表达式;而Integer的compare方法已经实现了一样的功能(传给它两个数,它会比较这两个数的大小),这时候就可以选择方法引用,直接用Integer::compare代替整个lambda表达式。
以前的冗余代码场景:
public static void main(String[] args) {
print(s -> System.out.println(s));
}
public static void print(Print print){
print.print("小喵");
}
方法引用优化后:
public static void main(String[] args) {
print(System.out::println);
}
public static void print(Print print){
print.print("小喵");
}
3.格式这样可以减少代码冗余,在Lambda中有地方存在相同的方案的话,没必要再重复写此逻辑了
4.语法详解 4.1 通过类名引用静态成员方法类或对象名 :: 方法名
类名:: 方法名
使用前提: 如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的静态方法,并且我们把要重写的抽象方法的参数按照顺序传入了这个静态方法中,这个时候我们就可与引用类的静态方法:
4.2 引用对象的实例方法对象名::方法名
使用前提: 如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个对象的成员方法,并且我们把要重写的抽象方法的参数按照顺序传入了这个静态方法中,这个时候我们就可与引用对象的实例方法:
4.3 引用类的实例方法类名::方法名
使用前提: 如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了第一个参数的成员方法,并且我们把要重写的抽象方法的参数按照顺序传入了这个静态方法中,这个时候我们就可与引用类的实例方法:
4.4 构造器引用5.总结类名:: new
方法引用的使用只做了解就可以,本来这就是一个语法糖并没有啥实际的作用,如果使用这个还要记忆那么多的规则个人觉的没啥用,平时在做开发的时候,我们可以借助idea来做,如果可以转化为方法引用的话,可以使用idea一件转换:



