方法引用:若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);
}
}