我需要在不知道先验知识的情况下调用一个方法
我已经尝试使用成员Method.invoke(Object,Object ...)作为第二个参数传递一个包含我的参数的对象数组,但这并没有真正起作用。
有办法做我想要的事吗?
答案 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或更高版本上可用。