Java8新特性方法引用、构造器引用、数组引用

引用

方法引用

方法引用是使用“::”将方法名和对象或类分隔,若lambda体中的内容有方法已经实现,我们可以使用“方法引用”,主要分为三种情况。

对象::实例方法名

注意:lambda体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的参数列表和返回类型保持一致。

public void test1(){
        User user = new User();
        user.setName("小明");
        //方法引用前
        Supplier<String> sup = () -> user.getName();
        System.out.println(sup.get());
        //方法引用后
        Supplier<String> sup1 = user :: getName;
        System.out.println(sup1.get());

    }
类::静态方法名
    @Test
    public void test2(){
        //方法引用前
        Comparator<Integer> com = (x,y) -> Integer.compare(x, y);;
        System.out.println(com.compare(1, 2));
        //方法引用后
        Comparator<Integer> com1 = Integer::compare;
        System.out.println(com1.compare(1, 2));
    }
类::实例方法名

若lambda参数列表中的第一参数是实例方法的调用者,而第二个参数是实例方法参数时,可以使用ClassName::method。

@Test
    public void test3(){
        //方法引用前
        BiPredicate<String, String> bp = (x,y) -> x.endsWith(y);
        System.out.println(bp.test("1", "2"));  
        //方法引用后
        BiPredicate<String, String> bp1 = String::equals;
        System.out.println(bp1.test("1", "2")); 

    }

构造器引用

public void test4(){
        //方法引用前
        Supplier<User> sup = () -> new User();
        User u = sup1.get();
        System.out.println(u.toString());
        //方法引用后
        Supplier<User> sup1 = User::new;//调用的为无参构造器
        User u1 = sup1.get();
        System.out.println(u1.toString());
    }

数组引用

public void test5(){
        //方法引用前
        Function<Integer, String[]> fn = (x) -> new String[x]; 
        String[] str = fn.apply(10);
        System.out.println(str.length);
        //方法引用后
        Function<Integer, String[]> fn1 = String[]::new;
        String[] str1 = fn1.apply(20);
        System.out.println(str1.length);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值