java8新特性之方法引用与构造器引用

方法引用与构造器引用

关于lambda表达式,咱们已经知道了,通常是有两部分组成。箭头操做符(->)左侧是lambda体的参数列表,右侧是lambda体,而lambda体里面的操做,有些状况下能够有另外一种写法,更加简短。
能够理解这种写法是lambda表达式的另一种表现形式,这种写法咱们大体能够分为三类,方法引用、构造器引用、数组引用,通常语法格式为X::Y,下面分别看一下。

方法引用

1.对象::实例方法名java

/***
     * 方法引用1
     */
    @Test
    public void test01() {
        String msg = "hello lambda!";
        // lambda体中的功能已经有方法完成 能够使用 方法引用
        Consumer consumer = str -> System.out.println(msg);
        consumer.accept(msg);

        // PrintStream对象
        PrintStream printStream = System.out;
        // 接口的方法 的参数列表和返回值类型  和 方法引用的 方法 参数列表和返回值类型保持一致
        Consumer<String> consumer2 = printStream::println;
        consumer2.accept("hello lambda");
    }

2.类::实例方法名数组

/***
     * 方法引用2
     */
    @Test
    public void test01() {
        String msg = "hello lambda!";

        // lambda体中的功能已经有方法完成 能够使用 方法引用
        Consumer consumer = str -> System.out.println(msg);

        consumer.accept(msg);

        // PrintStream对象
        PrintStream printStream = System.out;

        // 接口的方法 的参数列表和返回值类型  和 方法引用的 方法 参数列表和返回值类型保持一致
        Consumer<String> consumer2 = printStream::println;
        consumer2.accept("hello lambda");
    }

3.类::实例方法名app

/***
     * 方法引用3
     * pow是Math类的方法
     */
    @Test
    public void test03() {
        // lambda 表达式以前的写法
        BinaryOperator<Double> binaryOperator = (x, y) -> Math.pow(x, y);
        System.out.println(binaryOperator.apply(2d, 3d));

        // 接口的方法 的参数列表和返回值类型  和 方法引用的 方法 参数列表和返回值类型保持一致
        BinaryOperator<Double> binaryOperator2 = (x, y) -> Math.pow(x, y);
        System.out.println(binaryOperator2.apply(2d, 3d));
    }

构造器引用

与函数式接口相结合,自动与函数式接口中方法兼容。能够把构造器引用赋值给定义的方法,与构造器参数 列表要与接口中抽象方法的参数列表一致,默认使用空的构造器
@Test
    public void test05() {
        // 获取一个MyClass类型的实例
        Supplier<MyClass> myClassSupplier=MyClass::new;
        // 获取一个Object类型的实例
        Supplier<Object> objectSupplier = Object::new;
    }

数组引用

利用数组初始化一个Integer数组
@Test
    public void test06() {
        int size = 10;
        Function<Integer, Integer[]> function = (n) -> new Integer[n];
        Integer[] integers = function.apply(size);
    }

个人小结

当lambda体内的操做已经有方法实现了,这是的lambda体能够采用方法引用这种方式书写,代码更紧凑简洁,减小冗余。 很重要的一点是:接口的方法的参数列表和返回值类型和方法引用的方法,参数列表和返回值类型保持一致

文章首发于黑猫のBlog欢迎来留言啊!!!函数

相关文章
相关标签/搜索