或者,换句话说,像这样的东西有什么问题 -
new Method[] {Vector.add(), Vector.remove()}
Eclipse 一直告诉我我需要参数。但我显然不想调用这些方法,我只想将它们用作对象!该怎么办?
或者,换句话说,像这样的东西有什么问题 -
new Method[] {Vector.add(), Vector.remove()}
Eclipse 一直告诉我我需要参数。但我显然不想调用这些方法,我只想将它们用作对象!该怎么办?
这行得通,我不禁想知道,你在用这个做什么?
new Method[] {
Vector.class.getMethod("add", Object.class),
Vector.class.getMethod("remove", Object.class)
};
首先,您在这里编写语法。我的 javadocs 中没有“Vector.add()”。
你可以这样做:
Method [] methods = Vector.class.getMethods();
但你不能执行这些方法。这里没有闭包或函数对象。
这样可行 :)
我正在使用它来实例化可变数量的“堆叠”循环(循环内循环内循环)。
有一个静态方法,您可以向其传递起始索引、限制、对象以调用这些方法,最后是一个方法数组和一个参数数组。
编辑:粗略的代码——我花了 3 分钟来写,所以那里可能潜伏着一些非常糟糕的东西,但我认为总体思路很明显。
public static void loop(int start, int lessThan, Object obj, Method[] methods, Object[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
lastLoop++;
for(int i = start; i < lessThan; i++) {
for(int j = 0; j < methods.length; j++) {
methods[j].invoke(obj, args[j]);
}
}
}
如果您想知道我将这整件事用于什么 - 我只是在修补一种方法来进行排列,其中元素的数量少于位置的数量。我在尝试定义可变数量的循环(取决于位置的数量)时遇到了问题,因此决定用这个来规避它。