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

来源:互联网 发布:安卓收音机软件 编辑:程序博客网 时间:2024/06/06 08:54

引用

方法引用

方法引用是使用“::”将方法名和对象或类分隔,若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);    }
原创粉丝点击