在需要函数参数的方法中,我们可以把另一个同类型的方法直接传入,这称为方法引用的绑定。类似于C语言中的函数指针。
lambda表达式可以替代方法引用;或者说方法引用是lambda的一种特例,方法引用不可以控制传递参数。
4.1) 构造器引用
private Person construntorRef(Supplier<Person> sup){
Person p=sup.get();
return p;
}
@Test
public void testConstructorRef(){
Person p=construntorRef(Person::new);
System.out.println(p);
}
需要有无参的构造器。
4.2) 静态方法引用
private static void print(String s){
System.out.println(s);
}
@Test
public void testStaticRef(){
Arrays.asList("aa","bb","cc").forEach(TestMethodReference::print);
}
so easy,只要静态方法的参数列表和FI需要的参数一致就可以。
4.3) 成员方法引用
@Test
public void testMemberMethodRef(){
Arrays.asList("aa","bb","cc").forEach(System.out::println);
}
so easy,只要成员方法的参数列表和FI需要的参数一致就可以。
4.4) 类的任意对象的实例方法引用(很怪异)
@Test
public void testClassMemberMethodRef(){
String[] strs={"zzaa","xxbb","yycc"};
Arrays.sort(strs,String::compareToIgnoreCase);//OK
System.out.println(Arrays.asList(strs));
File[] files = new File("C:").listFiles(File::isHidden); // OK
}
,前方高能,请关掉耳机的音乐,认真思考,小心行事。
传统的java开发中,是不允许使用类名去调用成员方法的,这是一个基本原则,那么这里的这种写法就有点不太容易理解了。还是用实例说明:
用到的内部类:
import lombok.Data;
@Data
public