调用方法接受带参数的多个参数array
我需要在不知道事先知道的情况下调用一个方法,参数的数量是多少。
我试过使用成员Method.invoke(Object,Object ...)作为第二个参数传递一个包含我的参数的对象数组,但是这并没有真正的工作。
有没有办法做我以后的事情?调用方法接受带参数的多个参数array
您描述它的方式是正确的方法。但是,您的参数数组必须具有与目标方法具有相同数量的参数;他们必须以正确的顺序列出并具有适当的类型。你能发布你得到的异常堆栈跟踪和代码示例吗?
我有一个错误的参数调用,导致整个事情失败,但追溯到通话很难。 谢谢:) – 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或更高版本。
你甚至可以传递一个数组到上面的方法: Point [] p = {new Point(1,2),new Point(3,4),new Point(5,6)}; ploygonFrom(P); – Thushan 2009-07-09 20:40:21
Varargs可能允许你这样做,但你需要改变你的方法声明。 http://softwareas.com/reflecting-on-varargs – seth 2009-07-09 17:19:03