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!