我有功能A,功能B和功能C
我试图从Main中随机调用其中一个函数(A或B或C)。
我该怎么做呢?
我可以将这些函数放在名为FunctionList
的arraylist中然后执行以下操作?
int x = (int)(Math.random() * Functionlist.size());
FunctionCall = FunctionList.get(x)
答案 0 :(得分:2)
如果函数的数量很少,最简单的方法是switch
,
switch((int)(Math.random()*NUM_FUNCTIONS) {
case 0:
functionA();
break;
case 1:
functionB();
break;
// ...
}
答案 1 :(得分:0)
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) {
*这个答案大量借鉴here。
答案 2 :(得分:0)
如果没有参数,我可以通过创建-maybe匿名类来实现某些接口Function<T>
和方法call(T arg)
,甚至是Runnable
,从而以标准方式模仿函数对象。这些实例可以放入集合