• 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!

  • 相关阅读:
    windows 内存泄露和资源泄漏调试
    window驱动
    Direct2D教程(七)单色画刷
    Direct2D教程(三)简单几何图形
    求反射向量
    Visual Studio 2012中使用自定义project properties
    View Transform(视图变换)详解
    八进制字符与十六进制字符
    Direct2D教程(四)Path Geometry
    C++默认构造函数
  • 原文地址:https://www.cnblogs.com/kuangke/p/16880913.html
Copyright © 2020-2023  润新知