方法引用
/*
需求:
1.定义一个接口(Printable):里面定义一个抽象方法:void printString(String s);
2.定义一个测试类(PrintableDemo),在测试类中提供两个方法
一个方法是:userPrintable(Printable p)
一个方法是主方法,在主方法中调用usePrintable方法
*/
interface Printable{
void printString(String s);
}
public class PrintableDemo{
public static void main(String[] args) {
//在主方法中调用usePrintable方法
//Lambda
userPrintable(s -> System.out.println(s));
//方法引用符::
userPrintable(System.out::println);
//可推导的就是可省略的
}
private static void userPrintable(Printable p){
p.printString("Java!!!");
}
}
- 方法引用符
::
该符号为方法引用运算符,他所在的表达式被称为方法引用
- 上例解释
Lambda表达式:
userPrintables(s->System.out.println(s))
拿到参数s后通过Lambda表达式传递给System.out.println()方法处理
方法引用:
usePrintable(System.out::println);
直接使用System.out中的println方法来取代Lambda代码更加的简洁
方法引用相当于Lambda的孪生兄弟
Lambda表达式支持的方法引用
引用类方法,即引用类的静态方法
- 格式: 类::静态方法
- 例如:
Integer::parseInt
- Integer类的方法:public static int parseInt(String s) 将此String转换为int类型数据
引用对象的实例方法,即引用类中的成员方法
- 格式:对象::成员方法
- 例如:
"HelloWorld"::toUpperCase
- String类中的方法:public String toUpperCase() 将此String所有字符转换为大写
引用类的实例方法,即引用类中的成员方法
- 格式:类名::成员方法
- 例如:
String::substring
- String类中的方法: public String substring(int beginIndex,int endIndex)
- 从beginIndex开始到endIndex结束,截取字符串。返回一个子串,子串的长度为endIndex-beginIndex
引用构造器,即引用构造方法
- 格式:类名::new
- 例如:
Student::new