java8中的方法引用与构造器引用
java8中的方法引用与构造器引用
方法引用:若Lambda体中的内容有方法已经实现了,我们可以使用“方法引用”
主要的三种语法格式:
成都创新互联公司是一家专业从事网站设计制作、网站建设、网页设计的品牌网络公司。如今是成都地区具影响力的网站设计公司,作为专业的成都网站建设公司,成都创新互联公司依托强大的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、营销型网站建设及网站设计开发服务!
- 对象::实例名
- 类::静态方法名
- 类::实例方法名
注意:
- 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; } @Override public String toString() { return "Employee{" + "name='" + name + '\'' + ", age=" + age + ", salary=" + salary + '}'; } }
//对象::实例方法名 @Test public void test1(){ PrintStream ps1 = System.out; Consumer
con = (x) -> ps1.println(x); PrintStream ps = System.out; Consumer con1 = ps::println; Consumer con2 = System.out::println; con2.accept("abcdef"); } @Test public void test2(){ Employee employee = new Employee(); Supplier sup = () -> employee.getName(); String str = sup.get(); System.out.println(str); Supplier sup2 = employee::getName; String str2 = sup2.get(); System.out.println(str2); } //类:静态方法名 @Test public void test3(){ Comparator
com = (x, y) -> Integer.compare(x, y); Comparator 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; } @Override public String toString() { return "Employee{" + "name='" + name + '\'' + ", age=" + age + ", salary=" + salary + '}'; } }
//构造器引用 @Test public void test5(){ Supplier
sup = () -> new Employee(); //构造器引用方式 Supplier sup2 = Employee::new; Employee employee = sup2.get(); System.out.println(employee); } @Test public void test6(){ Function fun = (x) -> new Employee(x); Function fun2 = Employee::new; Employee emp = fun2.apply(101); System.out.println(emp); } 数组引用
格式:Type[ ]::new;
//数组引用 @Test public void test7(){ Function
fun = (x) -> new String[x]; String[] strs = fun.apply(10); System.out.println(strs.length); Function fun2 = String[]::new; String[] strs2 = fun2.apply(20); System.out.println(strs2.length); }
本文标题:java8中的方法引用与构造器引用
转载来于:http://scyanting.com/article/iidgii.html