方法引用是对lambda表达式的优化
/*
定义一个接口,其中的抽象方法 实现打印数据
*/
public interface Printable {
public abstract void print(String str);
}
/*
通过对象来使用成员方法
lanbda表达式是对接口的重写 如果重写的代码已经有了,则可以调用该方法,此时lambda表达式只是起着传参的作用
故可以对lambda进行优化 ,传参可以通过联想进而省略,实现引用的方法为:对象名::成员方法
注意事项:成员方法一定要可以接受参数,否则会报错
*/
public class DemoMember {
public void printUpperCase(String s)
{
System.out.println(s.toUpperCase());
}
}
/*
方法引用:是对lambda表达式的优化
注:lambda表达式注重的是解决问题,但是如果已有现成的解决方案,则可以通过方法引用这种方法来简化代码
lambda表达式中的参数类型可以根据接口的抽象方法联想起来 方法引用同样可以 方法引用符号::
*/
public class DemoMethod {
public static void main(String[] args) {
String str= "helloworld";
printString(str,str1 -> System.out.println(str1));//使用lambda表达式
printString(str,System.out::println);//使用方法引用,因为参数可以联想到,所以可以省略 然后存在对象和相关方法即可
printString(str,str1 -> {
DemoMember dm = new DemoMember();
dm.printUpperCase(str1);//使用lambda表达式调用成员方法
});
DemoMember dm = new DemoMember();
printString(str,dm::printUpperCase);//方法引用
}
private static void printString(String s,Printable p)
{
p.print(s);
}
}