• 方法引用和构造器引用


    1 方法引用

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

    (可以理解为方法引用是Lambda表达式的另一种表现形式)

    主要有三种语法形式

    对象:: 实例方法名

    类:: 静态方法名

    类:: 实例方法名


    注意:

    ① Lambda 体中调用的方法的参数列表和返回值类型,要与函数式

    接口中抽象方法的函数列表和返回值类型保持一致

    ② 若Lanbda参数列表中的第一参数是实例方法的调用者,而第二个参数是实例方法的接受者,

    可以使用 ClassName::方法名

    public class TestMethodRef {
    
        //对象::实例方法名
        @Test
        public void test1(){
            PrintStream ps = System.out;
            Consumer<String> con = x -> ps.println(x);
    
            PrintStream ps1 = System.out;
            Consumer<String> con1 =  ps1::println;
            con1.accept("ssssbbbb");
        }
    
        @Test
        public void test2(){
            Employee employee = new Employee();
            Supplier<String> sup = employee::getName;
            String name = sup.get();
            System.out.println(name);
        }
    
        //类:: 静态方法
        @Test
        public void test3(){
            Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
    
            Comparator<Integer> com1 = Integer::compare;
        }
    
    
        // 类::实例方法名
        @Test
        public void test4(){
            BiPredicate<String,String> bp = (x,y) -> x.equals(y);
    
            BiPredicate<String,String> bp2 = String::equals;
        }
    
    }


    2 构造器引用

    格式:className::new

    注意:需要调用的构造器的参数列表要与函数式接口中,抽象方法的参数列表保持一致

    //构造器引用
    @Test
    public void test5(){
        Supplier<Employee> sup = () -> new Employee();
        Employee employee = sup.get();
    
        //构造器引用的方式
        // 根据函数式接口的参数列表来寻找对应的构造器
        Supplier<Employee> sup1 = Employee::new ;
        System.out.println(sup1.get());
    }
    
    @Test
    public  void test6(){
        //Employee::new 此时调用的构造器是一个参数的构造
        Function<Integer,Employee> f = Employee::new;
        
        Employee e = f.apply(24);
        System.out.println(e.getAge());
        
        BiFunction<Integer,String,Employee> bif = Employee::new;
        Employee houchen = bif.apply(24, "houchen");
        System.out.println(houchen);
    }


    3、数组引用

    Type::new

    //数组引用
    @Test
    public void test7(){
        Function<Integer,String[]> f = (x) -> new String[x];
        String[] strs = f.apply(10);
        System.out.println(strs.length);
    
        Function<Integer,String[]> fun2 = String[]::new;
        String[] strs2 = fun2.apply(5);
        System.out.println(strs2.length);
    }
  • 相关阅读:
    设计模式相关,单例模式!
    混合App交互相关,jsBridge的原理
    Vue相关,插槽怎么用!
    Mysql相关,查询功能整理
    图文并茂讲解进程与线程
    线程与进程的区别及其通信方式
    算法,十进制数转任意进制数
    JavaScript,leetcode第198题,打家劫舍
    2.4G无线控制器附加AT2401C功放IC增加距离
    超低功耗WiFi :ESP8089
  • 原文地址:https://www.cnblogs.com/houchen/p/14199828.html
Copyright © 2020-2023  润新知