我有函数 A、函数 B 和函数 C
我正在尝试从 Main 随机调用其中一个函数(A 或 B 或 C)。
我该怎么做呢?
我可以将函数放在一个名为 FunctionList 的数组列表中吗
然后进行以下操作?
int x = (int)(Math.random() * Functionlist.size());
FunctionCall = FunctionList.get(x)
如果函数的数量很少,最简单的方法是 a switch
,
switch((int)(Math.random()*NUM_FUNCTIONS) {
case 0:
functionA();
break;
case 1:
functionB();
break;
// ...
}
Java 不支持函数指针。一种解决方法是有条不紊地命名您的函数,即 f1、f2、f3 等……然后根据该模式创建一个 Method 对象。例如,使用函数名 f1、f2、f3,您可以这样做:
java.lang.reflect.Method method;
try {
methodName = "f" + String.valueOf((int) Math.random()*NUM_FUNCTIONS);
method = obj.getClass().getMethod(methodName, param1.class, param2.class, ..);
} catch (SecurityException e) {
// ...
} catch (NoSuchMethodException e) {
// ...
}
然后像这样调用函数:
try {
method.invoke(obj, arg1, arg2,...);
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
*这个答案是从这里大量借来的。
我会以标准方式模拟函数对象,方法是创建 - 可能是匿名的 -Function<T>
使用方法实现某些接口的类call(T arg)
,或者甚至Runnable
,如果没有参数的话。这些实例可以放入一个集合中