将泛型方法+参数类型+返回类型存储在列表中,以便稍后调用,可以使用Java中的反射机制来实现。反射是指在运行时动态地获取类的信息并操作类的成员(方法、属性、构造函数等)。下面是一个实现该功能的示例代码:
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class GenericMethodStorage {
private List<MethodInfo<?, ?>> methodList;
public GenericMethodStorage() {
methodList = new ArrayList<>();
}
public <T, R> void addMethod(Method method) {
MethodInfo<T, R> methodInfo = new MethodInfo<>(method);
methodList.add(methodInfo);
}
public <T, R> R invokeMethod(int index, T arg) throws Exception {
MethodInfo<T, R> methodInfo = (MethodInfo<T, R>) methodList.get(index);
return methodInfo.invoke(arg);
}
private static class MethodInfo<T, R> {
private Method method;
public MethodInfo(Method method) {
this.method = method;
}
public R invoke(T arg) throws Exception {
return (R) method.invoke(null, arg);
}
}
}
使用示例:
public class Main {
public static void main(String[] args) throws Exception {
GenericMethodStorage storage = new GenericMethodStorage();
// 添加方法
storage.addMethod(Main.class.getMethod("printString", String.class));
storage.addMethod(Main.class.getMethod("printInteger", Integer.class));
// 调用方法
String strResult = storage.invokeMethod(0, "Hello, World!");
System.out.println(strResult);
Integer intResult = storage.invokeMethod(1, 123);
System.out.println(intResult);
}
public static void printString(String str) {
System.out.println("String: " + str);
}
public static void printInteger(Integer num) {
System.out.println("Integer: " + num);
}
}
该示例代码中,GenericMethodStorage类用于存储泛型方法的信息。通过addMethod方法可以将泛型方法添加到列表中,invokeMethod方法可以根据索引调用相应的泛型方法,并返回结果。
这种方法的优势在于可以动态地存储和调用各种类型的泛型方法,提高了代码的灵活性和可扩展性。适用场景包括但不限于:动态代理、插件化开发、事件处理等。
腾讯云相关产品和产品介绍链接地址:
请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。
领取专属 10元无门槛券
手把手带您无忧上云