方法引用:若Lambda方法體已經實現,我們可以使用方法引用
* 主要有三種語法格式:
* 對象::實例方法名
* 類::實例方法名
* 類::靜態方法名
*
* 注意:Lambda體中調用的方法的參數列表與返回值類型,要與函數式中接口的抽象方法的參數列表和返回值類型一樣
*
*
* 構造器引用:
* 格式:ClassName::new
*
*
* 數組引用:
* Type :: new
package airycode_java8.nice5; import airycode_java8.nice1.Employee; import org.junit.Test; import java.io.PrintStream; import java.util.Comparator; import java.util.function.BiPredicate; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; /** * * 方法引用:若Lambda方法體已經實現,我們可以使用方法引用 * 主要有三種語法格式: * 對象::實例方法名 * 類::實例方法名 * 類::靜態方法名 * * 注意:Lambda體中調用的方法的參數列表與返回值類型,要與函數式中接口的抽象方法的參數列表和返回值類型一樣 * * * 構造器引用: * 格式:ClassName::new * * * 數組引用: * Type :: new * * * * * Created by admin on 2019/1/2. */ public class TestMethodRef { @Test public void test1(){ PrintStream ps = System.out; //Consumer<String> con = (x)-> ps::println; Consumer<String> consumer = (x)-> ps.println(); // Consumer<String> consumer2 = ps::println; consumer.accept("aaa"); } @Test public void test2(){ Employee employee = new Employee(); Supplier<String> supplier = () -> employee.getName(); String str = supplier.get(); System.out.println(str); Supplier<Integer> supplier2 = employee::getAge; Integer age = supplier2.get(); System.out.println(age); } //靜態方法 @Test public void test3(){ Comparator<Integer> comparator = (x,y)->Integer.compare(x,y); Comparator<Integer> comparator2 = Integer::compare;//方法引用 } //類::實例方法(規則:兩個參數,第一個參數是調用方法的實例的調用者(x),第二個參數是實例方法(equals)的參數值(y)) @Test public void test4(){ BiPredicate<String,String> bp = (x,y)->x.equals(y); BiPredicate<String,String> bp2 = String::equals; } //構造器 @Test public void test5(){ Supplier<Employee> emp = ()->new Employee(); Supplier<Employee> emp2 = Employee::new; Employee employee = emp2.get(); System.out.println(employee); } //一個參數構造器 @Test public void test6(){ Function<Integer,Employee> fun = (x)->new Employee(x); Function<Integer,Employee> fun2 = Employee::new; Employee employee = fun2.apply(101); System.out.println(employee.getAge()); } //數組引用 @Test public void test7(){ Function<Integer,String[]> fun = (x)->new String[x]; String[] arr = fun.apply(10); System.out.println(arr.length); Function<Integer,String[]> fun2 = String[]::new; String[] arr2 = fun.apply(20); System.out.println(arr2.length); } }