java8中的方法引用与构造器引用

java8中的方法引用与构造器引用

方法引用:若Lambda体中的内容有方法已经实现了,我们可以使用“方法引用”

主要的三种语法格式:

成都创新互联公司是一家专业从事网站设计制作、网站建设、网页设计的品牌网络公司。如今是成都地区具影响力的网站设计公司,作为专业的成都网站建设公司,成都创新互联公司依托强大的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、营销型网站建设及网站设计开发服务!

  1. 对象::实例名
  2. 类::静态方法名
  3. 类::实例方法名

注意:

  1. Lmabda体中调用方法的参数列表与返回值类型要与函数式接口中抽象方法的函数列表和返回值类型保持一致
  2. 若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中的方法引用与构造器引用
URL链接:http://bzwzjz.com/article/iidgii.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都网站设计 成都网站设计 成都网站设计制作公司 高端品牌网站建设 成都网站建设公司 成都网站设计 成都网站制作 专业网站设计 重庆网站制作 成都网站建设 成都品牌网站设计 重庆企业网站建设 高端网站设计推广 成都模版网站建设 成都做网站建设公司 网站设计 手机网站制作设计 营销型网站建设 广安网站设计 四川成都网站设计 专业网站建设 网站设计制作报价