1.1、方法引用体验
1.2、方法引用符
方法引用符
:: 该符号为引用运算符,而且它所在的表达式被称为方法引用
- Lambda表达式:usePrintable(s->System.ou.println(s));
分析:拿到参数s后通过Lambda表达式,传递给System.out.println方法处理
- 方法引用:usePrintable(System.out::println);
分析:直接使用System.out中的println方法来取代Lambda,代码更加简洁
推到与省略
- 如果使用Lambda,那么根据“可推导就是可省略”的原则,无需指定参数类型,也无需指定的重载形式,他们都将被自动推导
- 如果使用方法引用,也是同样可以根据上下文进行推导
- 方法引用是Lambda的孪生兄弟
1.3、Lambda表达式支持的方法引用
常见的引用方式:
- 引用类方法
格式:类名::静态方法
范例:Integer::parseInt
package com.itheima05;
public class ConverterDemo {
public static void main(String[] args) {
// 调用useConverter();
/*useConverter((String s)-> {
return Integer.parseInt(s);
});*/
// 可以省略一些东西
// useConverter(s-> Integer.parseInt(s));
// 调用引用类方法
useConverter(Integer::parseInt);
// Lambda表达式被类方法替代的时候,他的形式参数全部 传递给静态方法作为参数
}
private static void useConverter(Converter c){
int number = c.convert("6666");
System.out.println(number);
}
}
Integer类的方法:public static int parseInt(String s)将此String转换为int类型数据
- 引用对象的实例方法
1.5、引用对象的实例方法
格式:对象::成员方法
范例:"HelloWorld"::toUpperCase
string类中的方法:public String toUpperCase()将此String所有字符转换为大写字母
定义一个类PrintString,里面定义一个方法
定义一个接口Printer,里面定义一个抽象方法
void printUpperCase(String s);
定义一个测试类PrinterDemo
package com.itheima06;
/*
定义一个类PrintString,里面定义一个方法
定义一个接口Printer,里面定义一个抽象方法
void printUpperCase(String s);
定义一个测试类PrinterDemo
*/
public class PrinterDemo {
public static void main(String[] args) {
/* usePrinter((String s)->{
System.out.println(s.toUpperCase());
});*/
// usePrinter(s-> System.out.println(s.toUpperCase()));
// 引用对象的实例方法
// 创建一个对象
PrintString ps=new PrintString();
usePrinter(ps::printUpper);
// Lambda表达式被对象实例方法替代的时候,他的形式参数全部传递给该方法作为参数
}
private static void usePrinter(Printer p){
p.printUpperCase("abc");
}
}