java8中的方法引用与构造器引用
主要的三种语法格式:
对象::实例名类::静态方法名类::实例方法名注意:
Lmabda体中调用方法的参数列表与返回值类型要与函数式接口中抽象方法的函数列表和返回值类型保持一致若Lambda参数列表中的第一参数是 实例方法的调用者,而第二个参数是 实例方法的参数时,可以使用ClassName::method
public class Employee {private String name;private int age;private double salary;public Employee() { super();}public Employee(int age){ this.age = age;}public Employee(String name, int age, double salary) { super(); this.name = name; this.age = age; this.salary = salary;}public String getName() { return name;}public void setName(String name) { this.name = name;}public int getAge() { return age;}public void setAge(int age) { this.age = age;}public double getSalary() { return salary;}public void setSalary(double salary) { this.salary = salary;}@Overridepublic String toString() { return "Employee{" + "name='" + name + '\'' + ", age=" + age + ", salary=" + salary + '}';}}
//对象::实例方法名@Testpublic void test1(){ PrintStream ps1 = System.out; Consumer<String> con = (x) -> ps1.println(x); PrintStream ps = System.out; Consumer<String> con1 = ps::println; Consumer<String> con2 = System.out::println; con2.accept("abcdef");}@Testpublic void test2(){ Employee employee = new Employee(); Supplier<String> sup = () -> employee.getName(); String str = sup.get(); System.out.println(str); Supplier<String> sup2 = employee::getName; String str2 = sup2.get(); System.out.println(str2);}
//类:静态方法名@Testpublic void test3(){ Comparator<Integer> com = (x, y) -> Integer.compare(x, y); Comparator<Integer> com1 = Integer::compare;}
构造器引用
格式:ClassName::new
注意:需要调用的构造器的参数列表要与函数式接口中抽象方法的参数列表保持一致
public class Employee {private String name;private int age;private double salary;public Employee() { super();}public Employee(int age){ this.age = age;}public Employee(String name, int age, double salary) { super(); this.name = name; this.age = age; this.salary = salary;}public String getName() { return name;}public void setName(String name) { this.name = name;}public int getAge() { return age;}public void setAge(int age) { this.age = age;}public double getSalary() { return salary;}public void setSalary(double salary) { this.salary = salary;}@Overridepublic String toString() { return "Employee{" + "name='" + name + '\'' + ", age=" + age + ", salary=" + salary + '}';}}
//构造器引用@Testpublic void test5(){ Supplier<Employee> sup = () -> new Employee(); //构造器引用方式 Supplier<Employee> sup2 = Employee::new; Employee employee = sup2.get(); System.out.println(employee);}@Testpublic void test6(){ Function<Integer, Employee> fun = (x) -> new Employee(x); Function<Integer, Employee> fun2 = Employee::new; Employee emp = fun2.apply(101); System.out.println(emp);}
数组引用
格式:Type[ ]::new;
//数组引用@Testpublic void test7(){ Function<Integer, String[]> fun = (x) -> new String[x]; String[] strs = fun.apply(10); System.out.println(strs.length); Function<Integer, String[]> fun2 = String[]::new; String[] strs2 = fun2.apply(20); System.out.println(strs2.length);}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。