我是Java的新手。我想创建一个方法,将第一个参数作为Function,将第二个参数作为对象列表,如下所示:
public void dynamicMethodExecution(Somefunction someFunction, List<T> params) {
//Pass the params to the someFunction and execute the someFunction.
}
如果我将任何函数和任何参数列表传递给&#39; dynamicMethodExecution&#39;,那么它应该通过传递参数来执行该函数。
此方法&#39; dynamicMethodExecution&#39;应该尽可能通用,即它应该采取任何类型的功能并在运行中执行它。
任何想法,我该怎么做?
答案 0 :(得分:0)
如果您坚持使用内置的Function<T, F>
类,那么此类上的apply
方法就是这样做的。但是,正如我在评论中所说,Function
类只代表1-ary函数,因此无法直接表示采用零参数或带有多个参数的函数。
答案 1 :(得分:0)
我终于做到了。请分享你的观点。
public static void asyncMethodInvoke(Class<?> clazz, String methodName, Object[] args) {
new Thread(new Runnable() {
@Override
public void run() {
try {
Class<?> params[] = new Class[args.length];
for (int i = 0; i < params.length; i++) {
if (args[i] instanceof Byte) {
params[i] = Byte.TYPE;
}
else if(args[i] instanceof Short) {
params[i] = Short.TYPE;
}
else if(args[i] instanceof Character) {
params[i] = Character.TYPE;
}
else if(args[i] instanceof Integer) {
params[i] = Integer.TYPE;
}
else if(args[i] instanceof Float) {
params[i] = Float.TYPE;
}
else if(args[i] instanceof Double) {
params[i] = Double.TYPE;
}
else if(args[i] instanceof Long) {
params[i] = Long.TYPE;
}
else if(args[i] instanceof Boolean) {
params[i] = Boolean.TYPE;
}
else {
params[i] = args[i].getClass();
}
}
Object _instance = clazz.newInstance();
Method method = clazz.getDeclaredMethod(methodName, params);
method.invoke(_instance, args);
}
catch (Exception e) {
System.out.println(e.getCause().getMessage());
}
}
}).start();
}
我正在使用Thread来异步运行方法。