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

问题描述:

我需要在不知道事先知道的情况下调用一个方法,参数的数量是多少。
我试过使用成员Method.invoke(Object,Object ...)作为第二个参数传递一个包含我的参数的对象数组,但是这并没有真正的工作。
有没有办法做我以后的事情?调用方法接受带参数的多个参数array

+0

Varargs可能允许你这样做,但你需要改变你的方法声明。 http://softwareas.com/reflecting-on-varargs – seth 2009-07-09 17:19:03

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

+0

我有一个错误的参数调用,导致整个事情失败,但追溯到通话很难。 谢谢:) – em70 2009-07-09 17:15:02

一旦你有Method对象,你可以使用getParameterTypes()来确定这一点。根据JavaDoc:

返回类对象数组 表示由本方法对象所表示方法 的形参类型 在声明顺序。 如果 底层方法不带参数,则返回长度为0的数组。

Varargs就是这样。 检查docs

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

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或更高版本。

+0

你甚至可以传递一个数组到上面的方法: Point [] p = {new Point(1,2),new Point(3,4),new Point(5,6)}; ploygonFrom(P); – Thushan 2009-07-09 20:40:21