Java8新特性 - 04 - 方法引用06 - 方式五 【类名[]::new

参考:https://blog.csdn.net/qq_39505245/article/details/123142780

1.类名[]::new

`1.将Lambda表达式 替换为 【类名[]::new】 的写法。
2.确保 【数组的构造方法】 的 参数与返回值 和 Lambda表达式的一致!` 

2.案例代码

本案例从 匿名内部类 --> Lambda 表达式 --> 方法引用 【类名[]::new】
的思路进行编码演示,一步一步的感受代码的变化。

2.1 准备一个普通的类,包含一个静态方法

`package com.northcastle.H_method_reference;

/**
 * 写一个类,用来调用静态方法的
 */
class ArrayCreate{
    /**
     * 写一个静态方法,可以进行调用的那种
     * @param integer
     * @return
     */
    public static String[] createStringArray(Integer integer){
        // 默认初始化一个10个长度的数组
        if (integer < 1){
            integer = 10;
        }
        String[] res = new String[integer];
        for (Integer i = 0; i < integer; i++) {
            res[i] = "方法引用字符串"+i;
        }
        return res;
    }
}` 



2.2 编写测试主类

`package com.northcastle.H_method_reference;

import java.util.Arrays;
import java.util.function.Function;
import java.util.function.Supplier;

public class ArrayNew {

    public static void main(String[] args) {
        //1.匿名内部类的方法
        Function<Integer,String[]> function01 = new Function<Integer, String[]>() {
            @Override
            public String[] apply(Integer integer) {
                 // 默认初始化一个10个长度的数组
                if (integer < 1){
                    integer = 10;
                }
                String[] res = new String[integer];
                for (Integer i = 0; i < integer; i++) {
                    res[i] = "匿名字符串"+i;
                }
                return res;
            }
        };
        System.out.println("匿名内部类 :"+ Arrays.toString(function01.apply(6)) );
        System.out.println("=====================");
        System.out.println();

        //2.Lambda表达式的方法
        Function<Integer,String[]> function02 =  (integer) -> { // 此时就感觉出来了,并没有减少什么代码量
            // 默认初始化一个10个长度的数组
            if (integer < 1){
                integer = 10;
            }
            String[] res = new String[integer];
            for (Integer i = 0; i < integer; i++) {
                res[i] = "Lambda字符串"+i;
            }
            return res;
        };
        System.out.println("Lambda表达式  :"+Arrays.toString(function02.apply(6)));

        System.out.println("=====================");
        System.out.println();

        //3.方法引用1 :【类名::静态方法】
        /**
         * ArrayCreate::createStringArray 的参数 和 返回值 都与 Function<Integer,String[]>  的 apply 一致,
         * 所以 符合方法调用的使用条件!
         */
        Function<Integer,String[]> function03 = ArrayCreate::createStringArray;
        System.out.println("方法引用  :"+Arrays.toString(function03.apply(6)));
        System.out.println("=====================");
        System.out.println();

        //4.方法引用2 :【类名[]::new】
        /**
         * 1.String[] arrays = new String[6];
         * 2.String[] arrays = function.apply(6);
         *   1中的字符数组的构造方法 与 2中的抽象方法的参数与返回值一致,
         *   故满足方法引用的使用条件,可以正常使用!
         */
        Function<Integer,String[]> function = String[]::new;
        String[] arrays = function.apply(6);
        for (int i = 0; i < arrays.length; i++) {
            arrays[i] = "字符数组构造new :"+i;
        }
        System.out.println("方法引用  :"+Arrays.toString(arrays));
        System.out.println("=====================");
        System.out.println();

    }
}` 


2.3 执行结果

三种方式的运行结果都正确!

在这里插入图片描述

3.完成

Congratulations!
You are one step closer to success!

posted @ 2022-11-11 16:28  狂客  阅读(54)  评论(0编辑  收藏  举报