方法引用对象
package com.yitong.sny.common.utils.pageutil;
import java.util.ArrayList;
import java.util.List;
/**
* 方法引用对象
*
* <p>用于接收方法的引用</p>
* <p>
* 示例:
* <pre><code>
* FuncObject.Param3<Object, Object, Object, Object> param3 = (a, b, c) -> {
* return String.format("%s %s %s %n", a, b, c);
* };
* </code></pre>
*
* @author zhangxuetu
* @date 2023-01-05
*/
public class FuncObject {
public static void main(String[] args) {
// 测试
Param3<Object, Object, Object, Object> param3 = (a, b, c) -> {
return String.format("%s %s %s %n", a, b, c);
};
System.out.println(param3.apply("1", "2", "3"));
}
/**
* 生成参数接口方法
*/
public static void generateParamsInterface() {
// 执行生成代码
String template = "\t@FunctionalInterface\n" +
"\tpublic interface Param%s<%s> {\n" +
"\t\tR apply(%s);\n" +
"\t}\n\n";
int maxParamsCount = 20;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i <= maxParamsCount; i++) {
List<String> generic = new ArrayList<>();
for (int j = 1; j <= i; j++) {
generic.add("P" + j);
}
generic.add("R");
List<String> params = new ArrayList<>();
for (int j = 1; j <= i; j++) {
params.add("P" + j + " var" + j);
}
stringBuilder.append(String.format(
template, i,
String.join(",", generic),
String.join(",", params)
));
}
System.out.println(stringBuilder);
}
//==============================================================
// 通过引用的方法获取对应数据(其他类里拷贝使用下面的两个生成方法)
//==============================================================
public static void generateGetPageInfo() {
String template = " public static <T, %s> PageInfo<T> getPageInfo(%s.%s<%s> key, List<T> list) {\n" +
" PageInfo<T> pageInfo = (PageInfo<T>) pageInfoMap.get(key);\n" +
" pageInfo.setList(list);\n" +
" return pageInfo;\n" +
" }\n\n";
String functionInterfaceName = "FunctionInterfaces";
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i <= 20; i++) {
List<String> genericList = new ArrayList<>();
for (int j = 1; j <= i; j++) {
genericList.add("P" + j);
}
genericList.add("R");
String interfaceName = "Param" + i;
String generic = String.join(", ", genericList);
String code = String.format(template, generic, functionInterfaceName, interfaceName, generic);
stringBuilder.append(code);
}
System.out.println(stringBuilder);
}
public static void generateRecordPageInfo() {
String template = " public static <T, %s> void recordPageInfo(%s.%s<%s> key, List<T> list) {\n" +
" PageInfo<T> pageInfo = new PageInfo<>(list);\n" +
" pageInfoMap.put(key, pageInfo);\n" +
" }\n\n";
String functionInterfaceName = "FunctionInterfaces";
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i <= 20; i++) {
List<String> genericList = new ArrayList<>();
for (int j = 1; j <= i; j++) {
genericList.add("P" + j);
}
genericList.add("R");
String interfaceName = "Param" + i;
String generic = String.join(", ", genericList);
String code = String.format(template, generic, functionInterfaceName, interfaceName, generic);
stringBuilder.append(code);
}
System.out.println(stringBuilder);
}
//==============================================================
// 接口方法
//==============================================================
@FunctionalInterface
public interface Param0<R> {
R apply();
}
@FunctionalInterface
public interface Param1<P1, R> {
R apply(P1 var1);
}
@FunctionalInterface
public interface Param2<P1, P2, R> {
R apply(P1 var1, P2 var2);
}
@FunctionalInterface
public interface Param3<P1, P2, P3, R> {
R apply(P1 var1, P2 var2, P3 var3);
}
@FunctionalInterface
public interface Param4<P1, P2, P3, P4, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4);
}
@FunctionalInterface
public interface Param5<P1, P2, P3, P4, P5, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5);
}
@FunctionalInterface
public interface Param6<P1, P2, P3, P4, P5, P6, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6);
}
@FunctionalInterface
public interface Param7<P1, P2, P3, P4, P5, P6, P7, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7);
}
@FunctionalInterface
public interface Param8<P1, P2, P3, P4, P5, P6, P7, P8, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8);
}
@FunctionalInterface
public interface Param9<P1, P2, P3, P4, P5, P6, P7, P8, P9, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9);
}
@FunctionalInterface
public interface Param10<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9, P10 var10);
}
@FunctionalInterface
public interface Param11<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9, P10 var10, P11 var11);
}
@FunctionalInterface
public interface Param12<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9, P10 var10, P11 var11, P12 var12);
}
@FunctionalInterface
public interface Param13<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9, P10 var10, P11 var11, P12 var12, P13 var13);
}
@FunctionalInterface
public interface Param14<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9, P10 var10, P11 var11, P12 var12, P13 var13, P14 var14);
}
@FunctionalInterface
public interface Param15<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9, P10 var10, P11 var11, P12 var12, P13 var13, P14 var14, P15 var15);
}
@FunctionalInterface
public interface Param16<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9, P10 var10, P11 var11, P12 var12, P13 var13, P14 var14, P15 var15, P16 var16);
}
@FunctionalInterface
public interface Param17<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9, P10 var10, P11 var11, P12 var12, P13 var13, P14 var14, P15 var15, P16 var16, P17 var17);
}
@FunctionalInterface
public interface Param18<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9, P10 var10, P11 var11, P12 var12, P13 var13, P14 var14, P15 var15, P16 var16, P17 var17, P18 var18);
}
@FunctionalInterface
public interface Param19<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9, P10 var10, P11 var11, P12 var12, P13 var13, P14 var14, P15 var15, P16 var16, P17 var17, P18 var18, P19 var19);
}
@FunctionalInterface
public interface Param20<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, R> {
R apply(P1 var1, P2 var2, P3 var3, P4 var4, P5 var5, P6 var6, P7 var7, P8 var8, P9 var9, P10 var10, P11 var11, P12 var12, P13 var13, P14 var14, P15 var15, P16 var16, P17 var17, P18 var18, P19 var19, P20 var20);
}
}