0

或者,换句话说,像这样的东西有什么问题 -

new Method[] {Vector.add(), Vector.remove()}

Eclipse 一直告诉我我需要参数。但我显然不想调用这些方法,我只想将它们用作对象!该怎么办?

4

3 回答 3

6

这行得通,我不禁想知道,你在用这个做什么?

new Method[] { 
  Vector.class.getMethod("add", Object.class), 
  Vector.class.getMethod("remove", Object.class) 
};
于 2009-01-09T00:48:10.777 回答
0

首先,您在这里编写语法。我的 javadocs 中没有“Vector.add()”。

你可以这样做:


Method [] methods = Vector.class.getMethods();

但你不能执行这些方法。这里没有闭包或函数对象。

于 2009-01-09T00:50:02.083 回答
0

这样可行 :)

我正在使用它来实例化可变数量的“堆叠”循环(循环内循环内循环)。

有一个静态方法,您可以向其传递起始索引、限制、对象以调用这些方法,最后是一个方法数组和一个参数数组。

编辑:粗略的代码——我花了 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]);
            }
        }
    }

如果您想知道我将这整件事用于什么 - 我只是在修补一种方法来进行排列,其中元素的数量少于位置的数量。我在尝试定义可变数量的循环(取决于位置的数量)时遇到了问题,因此决定用这个来规避它。

于 2009-01-09T00:53:38.553 回答