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歡迎來留言啊!!!函數

相關文章
相關標籤/搜索