如果一个lambda表达式代表的只是直接调用这个方法那么最好还说用名称来调用它而不是去描述如何调用它。显示地指明方法的名称可以让你的代码可读性更好。
1. 参数类别和返回类型必须与函数式接口中的抽象方法一致 2. 如果参数列表中的第一个参数是实例方法的调用者第二个参数是实例方法的参数则可以用ClassName::method
对象::实例方法 -- 方法引用
//用lambda表达式实现Consumer consumer x -> System.out.println(x);consumer.accept("hello world");//out实现了println方法Consumer consumer1 System.out::println;consumer1.accept("hello word 1");
类名::静态方法 -- 方法引用
//用lambda表达式实现BiFunction biFun (x,y) -> Integer.compare(x,y);//类名静态方法BiFunction biFun1 Integer::compare;int result1 biFun.apply(100,200);int result2 biFun1.apply(100,200);
类名::实例方法 -- 方法引用
//用lambda表达式实现BiFunction fun1 (s1,s2)-> s1.equals(s2);//类名实例方法BiFunction fun2 String::equals;fun1.apply("hello","hello");fun2.apply("hello","hello");
类名::new -- 构造器引用
//用lambda表达式实现Supplier sup ()->new String();//构造方法引用 类名newSupplier sup1 String::new;
类名::new -- 构造器引用
//用lambda表达式实现Function function x->new Integer(x);//类名newFunction function1 Integer::new;function1.apply("100");
String[]::new --数组引用
//用lambda表达式实现Function array x -> new String [x];//类型[]::newFunction array1 String[]::new;array1.apply(5);
所有代码执行结果
没有报错
100010Process finished with exit code 0