调用方法接受带参数数组的多个参数

时间:2009-07-09 17:04:56

标签: java reflection

我需要在不知道先验知识的情况下调用一个方法 我已经尝试使用成员Method.invoke(Object,Object ...)作为第二个参数传递一个包含我的参数的对象数组,但这并没有真正起作用。
有办法做我想要的事吗?

3 个答案:

答案 0 :(得分:2)

您描述它的方式是正确的方法。但是,您的参数数组必须具有与目标方法相同数量的参数;它们必须按正确的顺序列出并具有适当的类型。你能发布你得到的异常堆栈跟踪和代码示例吗?

答案 1 :(得分:0)

拥有Method对象后,您可以使用getParameterTypes()来确定此对象。来自JavaDoc:

  

返回一个Class对象数组   代表形式参数类型,   按声明顺序,方法   由此Method对象表示。   如果是,则返回长度为0的数组   底层方法不带参数。

答案 2 :(得分:0)

Varargs就是这样。 检查docs

  

如果您不知道将多少特定类型的参数传递给该方法,则使用varargs。这是手动创建数组的捷径   要使用varargs,请使用省略号(三个点,...),一个空格和参数名称来跟踪最后一个参数的类型。然后可以使用任意数量的参数调用该方法,包括无参数。

public Polygon polygonFrom(Point... corners) {
    int numberOfSides = corners.length;
    double squareOfSide1, lengthOfSide1;
    squareOfSide1 = (corners[1].x - corners[0].x)*(corners[1].x - corners[0].x) 
            + (corners[1].y - corners[0].y)*(corners[1].y - corners[0].y) ;
    lengthOfSide1 = Math.sqrt(squareOfSide1);
    // more method body code follows that creates 
    // and returns a polygon connecting the Points
}

PS。 Varargs在Java 1.5或更高版本上可用。